如何在MFC DLL中向C#类发送消息
如何在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#类发送消息的更多相关文章
- [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)
这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...
- Win32 DLL和MFC DLL 中封装对话框
现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题.这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题. ...
- 【boost】MFC dll中使用boost thread的问题
项目需要,在MFC dll中使用了boost thread(<boost/thread.hpp>),LoadLibraryEx的时候出现断言错误,去掉thread库引用后断言消失. 百度g ...
- 如何给对话框中的控件发送消息呢?Windows消息分类
以博文CTabCtrl中介绍的那样,给Tab添加子对话框来显示Tab内容.那么如果这个子对话框中含有个CTreeCtrl控件,有个Button控件,我想要模拟给这两个控件发送消息,该怎么办呢?直接把给 ...
- MFC DLL中如何响应PreTranslateMessage消息
最近项目中使用到MFC,由于工程是DLL的,在使用ToolTip时碰到非模态对话框无法显示的问题.查了一番资料,发现原因是由于:虽然MFC Regular DLL派生了CWinApp类,并有一个the ...
- Android Handler类 发送消息-post()和postDelay(), Looper讲解
https://blog.csdn.net/weixin_41101173/article/details/79701832 首先,post和postDelay都是Handler的方法,用以在子线程中 ...
- 如何使用GameObject类发送消息
一.GameObject发送消息的方法 GameObject类有三个方法可以实现发送消息,即SendMessage.BroadcastMessage和SendMessageUpwards.但是它们之间 ...
- 如何调用DLL中的导出类
之前在网上一直查不到关于把类打包成dll文件的程序,今天自己写了个测试程序,供大家参考 一.生成类的dll文件 1.我是在vs2008上测试的,建立工程,在选择建立何种类型的工程的时候,勾上appli ...
- 如何在 VS Code 中为 Java 类生成序列化版本号
前言 IDEA 提供自动生成序列化版本号的功能,其实 VS Code 也可以,只是默认关闭了这个功能,下面就来看看如何开启这个功能吧. 配置过程 首先需要保证 VS Code 上安装了提供 Java ...
随机推荐
- iOS UI-创建空项目
一.创建工程 二.删除ViewController 三.在Supporting Files/Info.plist文件中清空值 四.创建新的控制器 五.写代码 1.在AppDelegate.h文件中 # ...
- bat批处理文件运行时隐藏cmd窗口
想让bat运行时隐藏cmd窗口,最好的方法是使用vbs文件实现, 1.新建一个文本文档,改名为123.vbs,编辑内容: set ws=WScript.CreateObject("WScri ...
- bug 问题
1. 图片 img 标签,在IE浏览器下会有空白 - 解决办法:display:block; 2. IE6 下父级没有宽高,不会触发haslayout. 触发原因:子级浮动,父级没有宽高,overfl ...
- [转载]oracle游标概念讲解
原文URL:http://www.2cto.com/database/201203/122387.html ORACLE游标概念讲解 什么是游标? ①从表中检索出结果集,从中每次指向一条记录进行交互 ...
- DevExpress WPF入门指南:绑定编辑器对话框
绑定编辑器对话框 每个Smart Tag属性既可以设置也可以绑定.如下图所示,点击绑定按钮打开绑定对话框: 如果属性已经绑定,binging按钮会显示为黄色,绑定的文本会显示在相应的属性行. 绑定So ...
- MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(五)
MyEclipse超值折扣 限量 100 套! 立即开抢>> [MyEclipse最新版下载] MyEclipse支持Java EE技术(如JAX-WS和EJB 3.0),它们以功能包的形 ...
- FTP 主动模式 与被动模式
今天在被电信运营商给的没有内网ip被nat后的内网ip访问我的ftp服务器时出现了,连接被关闭的错误,经过多番查询发现问题原因是因为NAT内网ip没有被有效地转换为外网ip,也即是说NAT对ftp协议 ...
- 接口测试之postman-简单使用
Postman功能(https://www.getpostman.com/features) 主要用于模拟网络请求包 快速创建请求 回放.管理请求 快速设置网络代理 安装 下载地址:https://w ...
- arpg网页游戏特效播放(一)
网页游戏中的特效,主要包括:场景特效,攻击特效和UI特效三种.场景特效是在地图层上播放的特效,攻击特效主要是技能触发的一些特效,UI特效是面板上的一些特效,还有一些在人物身上播放的特效,例如脚底光圈特 ...
- SVN使用出现的问题及解决方案
SVN使用出现的问题及解决方案 一.问题描述: 使用TortoiseSVN-1.9.5进行CheckOut时,出现报错信息如下: Unable to connect to a repository ...