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