关于MFC中DLL如何接收消息的问题

我要做一个串口通信程序的一个模块,我由一个串口类的到数据(是通过SendMessage传递的),然后在对接收到的各种数据进行处理,并形成若干消息发送出去。现在问题是我想把... 我要做一个串口通信程序的一个模块,我由一个串口类的到数据(是通过SendMessage传递的),然后在对接收到的各种数据进行处理,并形成若干消息发送出去。现在问题是我想把我的模块包装为DLL,可是DLL如何接收消息呢?请高手指点。还有如果有比SendMessage更好的解决方案吗?
最好提供点示例代码,谢谢。
178752468兄的答案能否详细一些,特别是第一种方法具体怎么操作?
178752468兄:非常感谢,但是没有实现Dll接收消息的功能啊,你的1、2、3是一种方法的三个步骤吧,而不是三种方法。
展开
 我来答
178752468
2008-10-21 · TA获得超过291个赞
知道小有建树答主
回答量:517
采纳率:0%
帮助的人:396万
展开全部
1 可以在dll中加入一个初始化函数,将接收消息窗口句柄传给dll保存,dll就可以SendMessae给接收窗口
2 在dll中自己创建一个隐藏的窗口来接收消息
3 做成ocx可能更好用

补充:
1如果是MFC扩展DLL 则可将串口定义为一个独立的导出类,在类的构造函数中指定一个窗口指针或窗口句柄的参数,在应用窗口构造串口类时将自己的指针或句柄传给dll类,由类私有成员来保存,当dll收到串口消息后可通过SendMessage将接收的消息发给窗口;如果是一般的dll则可以单独做一个初始化函数以窗口指针或窗口句柄作为参数,在dll内部申请一个全局变量保存就行了.


class COMM
{
public:
COMM(CWnd* lpWnd){ASSERT(NULL!=lpWnd);
pWnd=lpWnd; //将窗口指针保存起来
}

private:
CWnd* pWnd;
}

有问题qq 178752468
焉湉湉00P
2008-10-20 · TA获得超过1856个赞
知道大有可为答主
回答量:1556
采纳率:100%
帮助的人:1388万
展开全部
你可以在DLL里再写一个消息处理函数,然后用SetWindowLong并传入GWL_WNDPROC参数来设置你新的消息处理函数地址,对于你不处理的消息用 CallWindowProc并传入旧的消息消息处理函数来处理它

你可以这样实现,在DLL里写一个函数,例如是叫HOOK吧,它有一个参数HWND;HOOK函数里面调用SetWindowLong并传入GWL_WNDPROC就可以设置指定的HWND的消息处理函数地址(SetWindowLong的返回值是旧的消息处理函数地址);剩下的就看你的消息处理函数怎么写了;对于你不需要处理的消息,都用
CallWindowProc(OldMsgProc,.....)来处理好了
===============
不懂再PM或HI留言
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
snowxn
互联网爱好者

2015-08-23 · 互联网情报员
知道大有可为答主
回答量:6422
采纳率:64%
帮助的人:1379万
展开全部
第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。
LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 处理用户自定义消息
...
return 0;
}
第三步:在类头文件的AFX_MSG块中说明消息处理函数:
class CMainFrame:public CMDIFrameWnd
{
...
// 一般消息映射函数
protected:
// {{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}
第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
如果用户需要一个整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ac6f3b38b
2008-10-20 · 超过11用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:0
展开全部
通过API函数
可以在DLL中自己定义一个API函数,供外部调用!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式