龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

利用VC从DLL传递消息到EXE(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
用程序中: (1) 在stdafx.h头文件中添加消息定义: #define WM_MSG WM_USER + 102 (2) 首先在AFX_MSG块中加入消息声明:在CTestMessageDLLDlg.h中,找到如下部分,并

用程序中:

  (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);

}

运行应用程序,就可以看到测试结果了。

精彩图集

赞助商链接