如何在MFC DLL中向C#类发送消息
一、 引言
由于Windows Message才是Windows平台的通用数据流通格式,故在跨语言传输数据时,Message是一个不错的选择,本文档将描述如何在MFC DLL中向C#窗口类发送消息。
二、 实现过程
1. 新建一个基于MFC的DLL工程,在工程作用是用于生成Dll库函数;
2. 在该工程中新增一个类,CMessager;
3. 在头文件中添加代码如下:
#define ZS_API extern "C" _declspec (dllexport) void ZS_API _sendMessageToCS(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
4. 在CPP文件中添加代码如下:
ZS_API _sendMessageToCS(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
SendMessage(hWnd, Msg, wParam, lParam);
}
5. 新建一个C#的WindowsApplication的测试工程TestMfcDllMessage;
6. 添加MsgTest普通类,类中代码如下:
public class MsgTest
{
public const int MSG_USER = 0x400;
public const int MSG_TEST = MSG_USER + 0x100;
}
7. 添加Messager类,类中代码如下:
public class Messager
{
[DllImport("MfcDllSendMessage.dll", EntryPoint = "_sendMessageToCS", CharSet = CharSet.Auto)] public static extern void _sendMessageToCS(IntPtr hWnd, UInt32 Msg, UInt32 wParam, UInt32 lParam);
}
8. 给Form1添加一个“调用MFC DLL发送消息”按钮,双击在事件响应中添加如下代码:
private void button1_Click(object sender, EventArgs e)
{
Messager._sendMessageToCS(this.Handle, MsgTest.MSG_TEST, , );
}
9. 在Form1类中重写默认窗口过程,代码如下:
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
case MsgTest.MSG_TEST:
string strInfo = string.Format("HWnd:{0}\r\nMsg:{1}\r\nWParam:{2}\r\nLParam:{3}", m.HWnd.ToString(), m.Msg.ToString(), m.WParam.ToString(), m.LParam.ToString());
MessageBox.Show(strInfo);
break; default:
base.DefWndProc(ref m);
break;
}
}
10. Build整个工程
三、 实现效果
单击“调用MFC DLL发送消息”,效果如下:
转载须知:
请尊重本人知识产权和劳动成果,本文可*转载,请注明出处:
博客网址:http://www.cnblogs.com/zs8861/
联系邮箱:117711668@qq.com
欢迎交流!