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

来源:互联网 发布:mac os怎样卸载软件 编辑:程序博客网 时间:2024/05/23 11:49
做的一个项目,需要在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);

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