Dll给主程序传递数据的试验

本文介绍了一个项目中DLL如何在特定时刻通过Windows消息机制向主程序传递数据,以减少资源占用。首先定义自定义消息WM_TEST,然后在主程序中声明并实现消息处理函数OnMsgTest。在DLL中,利用AfxGetMainWnd获取主窗口句柄,并调用SendMessage发送数据。这种方法适合小量数据传递。
做的一个项目,需要在Dll中的某一时刻给主窗体传递一些数据。
考虑使用线程或定时器不如使用Windows消息,所以做了个试验。试验是成功的。
说明:主程序窗体类为CMainDlg,MFC对话框程序
Dll为MFC动态链接库,类名CDllTest.

1.
在主程序和Dll中定义相同的消息
#define WM_TEST WM_USER + 110

2.
在主程序中声明消息处理函数
protected:
    afx_msg void OnMsgTest(WPARAM wParam, LPARAM lParam);

3.
实现消息处理函数
void CMainDlg::OnMsgTest(WPARAM wParam, LPARAM lParam) 
{
    //////
}

4.
使用ON_MESSAGE宏指令将消息映射到消息处理函数中
BEGIN_MESSAGE_MAP(CMainDlg, CDialog)
    ON_WM_CREATE()
    ON_MESSAGE(WM_TEST, OnMsgTest)
    //ON_REGISTERED_MESSAGE (WM_MY_MESSAGE,OnMyMessage)
END_MESSAGE_MAP()

5
在dll中添加如下代码:
将要传递的数据使用WPARAM或者LPARAM 强转一下,就可以使用以下代码给主程序发送数据了
HWND hMainDlg = AfxGetMainWnd()->m_hWnd;
::SendMessage(hMainDlg, WPARAM wParam, LPARAM lParam);

这种方法的优点是占用资源比使用线程或者定时器传递指针占用资源少,适用于少量数据传送。
过几天把适用于传递大量数据的方法记录出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值