EVC4写的COM Dll 中如何接收其他应用程序发过来的消息

迷死特兔 2008-06-02 04:11:34
EVC4写的COM Dll,这个COM DLL是作为一个插件被一个WIN32程序调用,com dll实现了规定的接口函数,现在需要这个COM DLL能接收另外第三方程序发过来的消息通知,然后自己做一些事情,想使用SendMessage或PostMessage发过来的,但hWnd不能确定,后来在COM Dll内创建了一个窗口,接收消息,但是实际运行后发现窗口短暂出现后就消失了,第三方程序发送WM_USER到这个新建的窗口,通过日志观察,倒是记录过一些消息过来了,但没有收到任何WM_USER消息,我就很不解了?

我CreateWindow时,hWndParent设为NULL,hInstance设为NULL,因为这两个我得不到,难道是这个原因?

请高手给一些思路了,谢谢了。
...全文
109 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷死特兔 2008-06-03
  • 打赏
  • 举报
回复
说明一下:
其实我要写的是一个SmartPhone上的主题插件程序,按照微软的SDK和MSND上的规定,主题插件是实现IHomePlugin,IPersistStream接口的COM Dll,由Home.exe调用,由于我的插件需要接收另外第三方exe程序发过来的消息通知,我在Google论坛看到有人遇到同样的问题,回复者说可以用dll内创建一个隐藏的窗口来接收消息,所以我才写了测试程序,在消息回调函数WinProc(...)加入日志观察,发现启用本插件后日志就能进入函数几次(仅几次后再收不到消息了),但没有一次进入WM_USER。有可能是你说的消息被阻塞了,是不是宿主程序Home.exe拦截了?

To nbcool:
如果不用隐藏窗口去接收消息,而是在这个主题插件Initialize(...)时新开一个线程接收消息,第三方的Exe程序PostThreadMessage过来能收到吗?
载舟之水 2008-06-02
  • 打赏
  • 举报
回复
不明白你为什么这么用COM,COM应当在系统中注册,然后其它程序用标准方法调用COM的接口。
另外你窗口消失可能是被其他窗口挡住了,或者是COM调用被Release了,导致窗口被Destory。

WM_USER没收到可能是窗口没找到或消息队列被阻塞了,这在单线程程序中很常见。

其实我建议你没必要创建一个窗口去接收消息,因为另一个程序还要去FindWindow,直接创建一个消息队列

然后PostThreadMessage也行。最好的办法还是维护一个线程,用event来通信。


19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧