如何在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 ...
随机推荐
- Oracle12c新特性之基本操作
1. 服务器端连接并启动数据库: sqlplus / as sysdba startup; 2. 服务器端连接并关闭数据库: sqlplus / as sysdba shutdown immedi ...
- golang channel本质——共享内存
channel是golang中很重要的概念,配合goroutine是golang能够方便实现并发编程的关键.channel其实就是传统语言的阻塞消息队列,可以用来做不同goroutine之间的消息传递 ...
- java反编译工具eclipse插件jad的使用
https://www.cnblogs.com/zhikou/p/8098137.html 这边文章主要介绍如何使用Eclipse的插件jad进行反编译,在查看一些jar包里面的class文件时,就可 ...
- entest1
1◆ ai I 2◆ ai I ir ɜː ie i: 3◆ u: ʌ ɜː ə ui u: ure ʊə
- 怎样解决IIS6.0上传文件限制的问题?
我们用IIS发布的Bs项目,如果进行文件上传,在上传文件的时候,无法上传文件大小超过4M的文件 设置文件上传大小的方法,就是修改项目的web.config配置 在项目中的web.config文件中,添 ...
- 1strcat/strcpy应用
分析下列程序输出 #include<iostream> #include<string.h> using namespace std; int main() { ]=]=&qu ...
- ShellExecute函数的问题
情境:自己写了一个loading画面,定时器到时间后调用shellexecute函数调用真正的程序. 问题:调用时出错,说找不到dll资源,但是用鼠标双击确可以打开. 经过分析之后,应该是路径的问题, ...
- 2.1 C++类的定义和声明
参考:http://www.weixueyuan.net/view/6333.html 总结: 类相当于一个新的数据类型,定义类对象时,除了能定义单个变量以外,用类定义一个数组或者指针都是可行的. 在 ...
- DevExpress v18.1新版亮点——WinForms篇(八)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v18.1 的新功能,快来下载试用新版本! ...
- Translate Exercises(3) 科技英语翻译
[1] CMOS logic is a newer technology, based on the use of complementary MOS transistorsto perform lo ...