• 如何在MFC DLL中向C#类发送消息


    如何在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}
    Msg:{1}
    WParam:{2}
    LParam:{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发送消息”,效果如下:

    clip_image002

    转载须知:

    请尊重本人知识产权和劳动成果,本文可自由转载,请注明出处:

    博客网址:http://www.cnblogs.com/zs8861/

    联系邮箱:117711668@qq.com

    欢迎交流!

  • 相关阅读:
    ES6 Symbol类型 附带:Proxy和Set
    why updating the Real DOM is slow, what is Virtaul DOM, and how updating Virtual DOM increase the performance?
    React高级指南
    池(Pool)
    计算机网络Intro
    React基础
    CommonJS 与 ES6 的依赖操作方法(require、import)
    webpack初识(biaoyansu)
    关于时间安排贪心算法正确性的证明
    DP总结
  • 原文地址:https://www.cnblogs.com/zs8861/p/4262464.html
Copyright © 2020-2023  润新知