如何在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. 在EO中对数据的重复性进行验证

    只有在数据提交到EO中的时候才会执行set方法进行验证. 如果想要实现实时验证,可以在输入参数的地方添加事件,但是无需为此事件创建方法. 我的理解: 1.我们在页面上对内容进行修改的时候,OAF框架仅 ...

  2. shiro工作过程

    http://blog.csdn.net/mine_song/article/details/61616259 什么是shiro shiro是apache的一个开源框架,是一个权限管理的框架,实现 用 ...

  3. forget word a out 1

      a 1★ a 不,非,无;在~ 的   2★ ab 相反,变坏,离去     3★ abs 相反,变坏,离去      

  4. C/S架构系统自动化测试入门

    所谓C/S架构即Client/Server(客户端/服务器架构).虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可 ...

  5. ural1469

    题解: 从左往右加入每一个点 判断一下和,pre,nxt是否相交 删除得时候也要判断 代码: #pragma GCC optimize(2) #include<cstdio> #inclu ...

  6. bzoj1607

    题解: 帅选法 把相同的放在一起 代码: #include<bits/stdc++.h> using namespace std; ; int n,a[N],s[N],M,ss[N]; i ...

  7. Python Django 前后端数据交互 之 HttpRequest、HttpResponse、render、redirect

    在使用三神装的时候,首先当然是得要导入它们: from django.shortcuts import HttpResponse, render, redirect   一.HttpRequest捕获 ...

  8. spring学习笔记Core Technologies

    Spring 框架最重要的是Ioc(Inversion of Control)容器,在这个基础之上衍生出了AOP(Aspect-Oriented Programming)技术,80/20法则,这货可以 ...

  9. PowerShell基础

    1. 一些命令像Get-SPSite有不同的参数变量.这些变量通过-?展示出来. Get-SPSite -? 2. F3 在当前行显示最近的一条命令结果 3. F7 显示之前执行过的命令列表 4. 显 ...

  10. Java中的容器和注入分析

    为什么会出现容器的注入? 容器:顾名思义,装东西的器物. 至于spring中bean,aop,ioc等一些都只是实现的方式:具体容器哪些值得我们借鉴,我个人觉得是封装的思想.将你一个独立的系统功能放到 ...