如何在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

欢迎交流!

如何在MFC DLL中向C#类发送消息的更多相关文章

  1. [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)

      这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...

  2. Win32 DLL和MFC DLL 中封装对话框

    现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32   DLL和MFC   DLL两个方面来分析并解决这个问题.     ...

  3. 【boost】MFC dll中使用boost thread的问题

    项目需要,在MFC dll中使用了boost thread(<boost/thread.hpp>),LoadLibraryEx的时候出现断言错误,去掉thread库引用后断言消失. 百度g ...

  4. 如何给对话框中的控件发送消息呢?Windows消息分类

    以博文CTabCtrl中介绍的那样,给Tab添加子对话框来显示Tab内容.那么如果这个子对话框中含有个CTreeCtrl控件,有个Button控件,我想要模拟给这两个控件发送消息,该怎么办呢?直接把给 ...

  5. MFC DLL中如何响应PreTranslateMessage消息

    最近项目中使用到MFC,由于工程是DLL的,在使用ToolTip时碰到非模态对话框无法显示的问题.查了一番资料,发现原因是由于:虽然MFC Regular DLL派生了CWinApp类,并有一个the ...

  6. Android Handler类 发送消息-post()和postDelay(), Looper讲解

    https://blog.csdn.net/weixin_41101173/article/details/79701832 首先,post和postDelay都是Handler的方法,用以在子线程中 ...

  7. 如何使用GameObject类发送消息

    一.GameObject发送消息的方法 GameObject类有三个方法可以实现发送消息,即SendMessage.BroadcastMessage和SendMessageUpwards.但是它们之间 ...

  8. 如何调用DLL中的导出类

    之前在网上一直查不到关于把类打包成dll文件的程序,今天自己写了个测试程序,供大家参考 一.生成类的dll文件 1.我是在vs2008上测试的,建立工程,在选择建立何种类型的工程的时候,勾上appli ...

  9. 如何在 VS Code 中为 Java 类生成序列化版本号

    前言 IDEA 提供自动生成序列化版本号的功能,其实 VS Code 也可以,只是默认关闭了这个功能,下面就来看看如何开启这个功能吧. 配置过程 首先需要保证 VS Code 上安装了提供 Java ...

随机推荐

  1. javaScript面向对象是什么?(一)

    js就是个面向对象语言,一切皆对象 一.什么是面向对象? 简单点,就这么说吧.生活中有一些个物品,譬如(哈哈,还想起个譬如)说一个iPhone,我们也不知道里面的工作原理吧?但是咱们会按按钮呀,用一俩 ...

  2. SQL基础用法(实例一)

    /* 2006年10月01日 SQL Server 数据库的基本操作 (1) 数据库的创建 (2) 数据表的创建以及相关约束的指定(含临时表) (3) 数据的添/删/改 (4) 数据的查询 */ () ...

  3. MySql和Sql的单行注释和多行注释的区别

    这里,请允许我把mysqlserver和sqlserver注释一起说明 1.单行注释 1)mysql中,可以用“-- ”和“ --”来注释 -- 方式1:单行注释 -- create database ...

  4. CCF 高速公路 tarjan求强连通分量

    问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的 ...

  5. sql 判断字符串中是否含有数字和字母

    判断是否含有字母 select PATINDEX('%[A-Za-z]%', ‘ads23432’)=0 (如果存在字母,结果<>1) 判断是否含有数字 PATINDEX('%[0-9]% ...

  6. 练习vue(用户管理)1

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 对spring 对持久层的支持和数据库连接池的理解

    1.spring对持久层的支持在于,得到数据库连接之后操作上的封装,将操作简化了.也就是说以后操作sql语句就用XXXTemplate(就是一个工具类)对象了. 2.数据库连接池的作用只在于得到数据库 ...

  8. PHP生成GIF动态图片验证码

    <?php /** * 调用示例 * */ session_start(); $randCode = ''; //验证码随机 $str="abcdefghjkmnpqrstuvwsyz ...

  9. JQ插件写法 扩展JQ方法

    目录: 1.基本JQ扩展插件js的格式 2.对JQ选中元素的方法的扩展,调用类似于$("selector").myMethod(),这里的myMethod是自己扩展的方法,与.cl ...

  10. 2016 ACM/ICPC Asia Regional Qingdao Online 1001 I Count Two Three(打表+二分搜索)

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...