- 浏览: 1524458 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
在进行DLL开发过程中,尤其在进行底层硬件开发过程中,比如实时接收数据,进程需要和应用程序进行交互,而DLL和应用程序最好的交互就是发消息了,在DLL中定义消息的方式和在应用程序中定义消息的方式非常相似。下面谈谈这两种定义的方法:
一、在应用程序自定义消息方法:
一般自定义消息有一定的范围,虽然说自定义消息从WM_USER开始,但是由于我们的工程里面一般还有很多其他的控件,他们也要占用一部分WM_USER 消息范围,所以我们必须为他们留出一部分范围,这里,我们保留100个消息,一般情况下,这可以满足我们的要求。
(1) 定义消息的值。在我们要发生消息的地方(例如CMyView.cpp的开始部分)或者stdafx..h文件,进行如下定义:
#define WM_MSG (WM_USER+101) |
接下来的工作其实很简单,我们在前面说了,消息正常工作有3个部分必须协调:消息声明、消息映射、消息体。我们就一次进行手工加入。
(2)首先在AFX_MSG块中加入消息声明:在CMyView.h中,找到如下部分,并加入消息声明:
protected: // {{AFX_MSG(CMyView) ...... afx_msg LRESULT OnMyMsg(WPARAM wParam,LPARAM lParam); |
(3)在MESSAGE_MAP块中添加ON_MESSAGE宏指令:
BEGIN_MESSAGE_MAP(CMyView, CView) file://{{AFX_MSG_MAP(CMyView ) ..... ON_MESSAGE(WM_MSG, OnMyMsg) END_MESSAGE_MAP() |
(4)添加消息函数体:
LPESULT CMyView::OnMyMsg(WPARAM wParam, LPARAM lParam)
{ |
AfxMessageBox("消息已经收到!"); return 0; } |
消息至此就已经定义完毕,接下来我们就可以激活消息了,就可以用我们前面所说的PostMessage/SendMessage来发送消息了。
如:::PostMessage(hwnd,WM_MSG,0,1);
PostMessage:不用等消息返回。
SendMessage:需要等消息返回。
二、从DLL中传递消息到EXE
在DLL中定义消息和上面的方法很相似,有两点不同的地方:
1、 在DLL和应用程序中两个地方定义相同的消息。
2、 应用程序调用DLL程序之后,需要将应用程序的窗口句柄传递给DLL,以便DLL中的消息返回。
在DLL工程中:
(1) 在stdafx.h头文件中添加消息定义:
#define WM_MSG WM_USER + 102 |
(2) 添加启动消息的输出函数:
CMessageDLLApp theApp; //发送消息 extern "C" _declspec(dllexport) void StartSendMessage(HWND hwnd) { theApp.SendMessage(hwnd); } |
其中hwnd是接收消息的窗口句柄。
(3) 添加启动消息的实现函数:
在头文件中添加函数声明:
void SendMessage(HWND hwnd); |
在CPP文件中添加函数实现
//启动发送消息
void CMessageDLLApp::SendMessage(HWND hwnd) { ::PostMessage(hwnd,WM_MSG,0,1); } 在应 |
用程序中:
(1) 在stdafx.h头文件中添加消息定义:
#define WM_MSG WM_USER + 102 |
(2) 首先在AFX_MSG块中加入消息声明:在CTestMessageDLLDlg.h中,找到如下部分,并加入消息声明:
。。。。。。
afx_msg LRESULT OnMyMsg(WPARAM wParam,LPARAM lParam); DECLARE_MESSAGE_MAP() |
(3) 在MESSAGE_MAP块中添加ON_MESSAGE宏指令:
BEGIN_MESSAGE_MAP(CTestMessageDLLDlg, CDialog) 。。。。。。 ON_MESSAGE(WM_MSG, OnMyMsg) //}}AFX_MSG_MAP END_MESSAGE_MAP() |
(4) 添加消息函数体:
LRESULT CTestMessageDLLDlg::OnMyMsg(WPARAM wParam, LPARAM lParam)
{ AfxMessageBox("消息已经收到!"); return 0; } |
(5) 在对话框上添加一个按钮,在按钮事件中,先调用DLL文件,然后发送一个测试消息响应的命令:
void CTestMessageDLLDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 //定义函数 typedef void (_cdecl*STARTSENDMESSAGE)(HWND hwnd); HMODULE hmessage = NULL; STARTSENDMESSAGE StartSendMessage = NULL; //导入DLL库文件 hmessage = LoadLibrary("MessageDLL.dll"); if(hmessage==NULL) { FreeLibrary(hmessage); exit(0); } //导入DLL中测试消息函数 StartSendMessage = (STARTSENDMESSAGE)GetProcAddress(hmessage,"StartSendMessage"); if(StartSendMessage==NULL) { FreeLibrary(hmessage); exit(1); } //获取对话框的窗口句柄 HWND hwnd = this->GetSafeHwnd(); //发送测试消息函数 (*StartSendMessage)(hwnd); } |
运行应用程序,就可以看到测试结果了。
http://www.cppblog.com/ivenher/articles/37002.html
发表评论
-
数据结构与算法分析(C语言描述)源代码与答案
2009-12-14 11:44 6715数据结构与算法分析(C语言描述)(第二版) Mark A ... -
A new Michael Jackson song
2009-10-12 16:48 948<!-- [if gte mso 9]><x ... -
makefile 大全
2009-02-24 07:37 1179http://chenl.blogbus.com/logs ... -
Linux_Unix环境下的Make和Makefile详解
2009-02-24 07:35 1320无论是在 Linux 还是在 U ... -
C++的11个注意要点
2009-02-24 07:33 1029C++ 的 11 个注意要点 ... -
运用autoconf和automake自动生成Makefile实例讲解
2009-02-24 07:30 4068运用 autoconf 和 automake ... -
makefile详解(6)
2009-02-24 07:23 1783makefile 详解( 6 ) ... -
makefile详解(5)
2009-02-24 07:22 1674<!-- --><!-- -->& ... -
makefile详解(4)
2009-02-24 07:21 1421<!-- --><!-- -->& ... -
makefile详解(3)
2009-02-24 07:20 1636<!-- --><!-- --> & ... -
makefile详解(2)
2009-02-24 07:19 1331<!-- --><!-- --> & ... -
makefile详解(1)
2009-02-24 07:18 1505makefile 详解 ... -
VC++动态链接库(DLL)编程深入浅出(二) Win32 Dynamic-Link Library
2008-08-19 14:23 8023上节给大家介绍了静态链接库与库的调试与查看( 动态链 ... -
VC++动态链接库(DLL)编程深入浅出(一) Win32 Static Library
2008-08-19 14:13 7115http://www.pconline.com.cn/pced ... -
VC++常用数据类型及其操作详解
2008-08-18 23:43 1383http://blog.csdn.net/flxyzsby/a ... -
VC++数据类型转换大全
2008-08-18 23:25 64097int i = 100; long l = 2001; f ... -
DLL导出变量
2008-08-18 16:20 2071DLL定义的全局变量可以被调用进程访问;DLL也可以访问调用进 ... -
DLL导出类
2008-08-18 16:20 2627DLL中定义的类可以在应用工程中使用。 下面的例子里,我 ... -
MFC规则DLL 概述
2008-08-18 16:19 2821MFC规则DLL的概念体现在两方面: (1) 它是MFC ... -
MFC规则DLL的创建
2008-08-18 16:18 1852我们来一步步讲述使用MFC向导创建MFC规则DLL的过程,首先 ...
相关推荐
在Microsoft Visual C++ (VC) 开发环境中,...了解并遵循这些规则,开发者可以有效地利用VC中的DLL进行模块化开发,提高代码复用性和软件性能。实践中,不断调试和测试,确保DLL的稳定性和效率,是成功运用DLL的关键。
【VB调用VC的DLL】知识点详解 在编程领域,不同语言之间的互操作性是一个重要的需求...通过以上步骤,VB就能成功地调用VC6.0开发的DLL,充分利用C++的性能优势。这种方式对于需要混合使用不同语言特性的项目尤其有用。
hDll := LoadLibrary('VCDLL.dll'); if hDll <> 0 then begin @AddFunc := GetProcAddress(hDll, 'Add'); if @AddFunc <> nil then try // 调用函数 Result := AddFunc(3, 5); finally // 不再需要DLL时...
本资料主要关注VC++环境下,利用窗口Hook(Window Hook)进行DLL注入的技术,这对于理解和实践系统监控、调试以及插件开发等具有深远意义。下面,我们将深入探讨这一领域的核心知识点。 一、窗口Hook原理 窗口Hook...
《VC_Dll_Help_Doc》是一份关于Visual C++(VC)动态链接库(Dll)开发和使用的详细文档,旨在帮助开发者深入理解和熟练运用DLL技术。动态链接库是Windows操作系统中的一种共享代码的方式,它允许多个程序共享同一块...
标题"Vc 调用matlab以dll形式调用m文件"正是讨论了这个主题,通过创建DLL,我们可以将MATLAB的计算能力集成到C++应用程序中。以下是关于这个主题的详细解释: 1. **MATLAB M文件**: M文件是MATLAB的主要脚本文件...
这里的`MyDLLFunction`是LabVIEW VI的导出函数名,`input1`和`input2`是传递给DLL的参数。 4. **错误处理**:由于LabVIEW和VC++可能对错误处理有不同的机制,因此需要在VC++中添加适当的错误检查代码,以捕获和处理...
本示例中,我们将探讨如何在VC中调用由Delphi编写的动态链接库(DLL),特别是涉及到类的传递以及回调(callback)机制。在Delphi中创建DLL,然后在VC或C#中调用,可以利用Delphi的强大面向对象特性,并将其集成到...
由于VB自身对图像处理的原生支持有限,因此我们可以利用VC生成一个包含图像旋转算法的DLL,然后在VB中调用这个DLL进行图片处理。 以下是实现这个功能的关键步骤: 1. **在VC中编写DLL**: - 首先,你需要在VC中...
在某些情况下,需要通过VB应用程序调用由VC编写的动态链接库(DLL)来扩展功能或利用特定的C++代码优势。本主题涉及的知识点主要集中在如何实现VB调用VC写的DLL,并且DLL能够返回数组数据。 首先,了解DLL的基本...
"LUA与VC DLL互相调用"这个主题探讨的是如何在LUA脚本中调用DLL中的函数,以及如何从DLL中反向调用LUA函数,实现两者之间的交互。 首先,让我们深入了解LUA调用DLL的过程。为了使LUA能够调用DLL,我们需要在DLL中...
DLL注入常常涉及到消息传递,以便于注入的DLL与目标进程进行通信。 在技术教程.doc文档中,预计会有更详细的步骤和源码示例,帮助开发者理解并实现这些技术。对于C++程序员来说,掌握DLL注入和钩子技术不仅能提升...
总之,VC DLL注入源代码是利用VC++编程实现DLL注入技术的关键。理解并掌握这些知识点,可以帮助开发者更好地利用这一技术进行软件开发和调试,同时也需要关注其潜在的安全风险。在实践中,务必遵循合法、合规的原则...
会根据控制程序传递过来的参数加载目标DLL,这样目标DLL也就随着服务输入法一同注入到 目标程序中了。注意服务输入法是控制程序用WM_INPUTLANGCHANGEREQUEST消息在所有窗口 中自动激活的,如果某个窗口自动激活...
在这个案例中,我们要解决的问题是如何利用VB来调用一个VC生成的DLL,该DLL能将YUV格式的视频帧转换成BMP(Bitmap)图像格式。以下是关于这个主题的详细解释: 首先,让我们了解一下YUV和BMP格式。YUV是一种颜色...
在IT领域,跨编程语言的互操作性是一个重要的议题,特别是在需要利用不同语言的优势时。本案例中的"Method_of_delphi_call_...正确地完成这项工作,不仅可以充分利用VC的C++库,还能在Delphi环境中构建高效的应用程序。
生成的LIB文件包含了DLL的导入库,使得VC或Qt可以直接链接到它,而无需动态加载。 在VC项目中调用Delphi DLL,首先需要添加生成的LIB文件到项目的链接器输入中。然后通过`#pragma comment(lib, "yourlib.lib")`来...
本文将深入探讨如何利用VC++(Visual C++)编写的二叉树排序算法,并将其封装为DLL(动态链接库),供VB(Visual Basic)程序调用,实现高效的数据排序。在描述中提到的环境下,即CPU为T6670 2.20GHz,内存为2GB,...
- 要使VC能够调用C# DLL,我们需要利用CLR的互操作性特性,如Platform Invoke(P/Invoke)或C++/CLI。 2. **P/Invoke**: - P/Invoke是.NET Framework提供的一种机制,允许托管代码(如C#)调用非托管代码(如C++...
### PB调用VC创建的DLL在MIS中的设计...通过PB调用VC创建的DLL来实现Excel报表功能,不仅能够充分利用两种开发工具的优势,还能显著提升软件开发的效率和质量。这种方法在实际项目开发中具有很高的实用价值和推广意义。