从其他线程回调

时间:2012-03-01 10:17:15

标签: c++ dll callback

我遇到来自其他应用程序线程的回调问题。 Dll是Addinational应用程序和Application程序之间的某种包装器,它在Application程序存储器(具有相同的PID)中工作。添加国家应用程序(其他线程和PID)是主循环中寻找“东西”的应用程序,当找到它时,它从Dll调用Callback函数然后Dll从Application程序调用Callback函数。也许它对上面的图像有点困惑。 并且故障(当dll从应用程序调用回调函数时)崩溃:

  

MainProgram.exe中0x70786a46处的未处理异常:0xC0000005:访问冲突读取位置0x00000164。

     

调用堆栈mshtml.dll

使用IE控件来更新UI的应用程序。如何在Addinational应用程序回调时更新UI?

Callbacks

2 个答案:

答案 0 :(得分:1)

SendMessage是将结果发布到GUI线程的通用解决方案。它为您执行所有线程同步,并且在接收器线程的窗口处理消息之前不会返回。

PostThreadMessage不太可靠,因为当接收器处于例如模式循环中时,消息可能/将会丢失。 MessageBox,除非您添加了一个拦截线程消息的钩子 - 所以只需使用SendMessage

更高级的技术涉及自己进行线程同步,例如有一个缓冲区,但无论如何可能还会涉及到SendMessage的GUI线程,所以,我建议你从这开始,如果这还不错,那就不要做更多。

编辑:dang,我现在看到虽然第一句话谈论线程,但它实际上是关于将数据从一个进程发送到另一个进程。那么,有WM_COPYDATA。请考虑来自一个进程的(用户级别)指针,在其他进程中无效

答案 1 :(得分:0)

因此,您希望调用属于另一个进程的函数。我想你需要阅读有关RPC:s http://msdn.microsoft.com/en-us/library/windows/desktop/aa378651%28v=vs.85%29.aspx

的内容