我遇到来自其他应用程序线程的回调问题。 Dll是Addinational应用程序和Application程序之间的某种包装器,它在Application程序存储器(具有相同的PID)中工作。添加国家应用程序(其他线程和PID)是主循环中寻找“东西”的应用程序,当找到它时,它从Dll调用Callback函数然后Dll从Application程序调用Callback函数。也许它对上面的图像有点困惑。 并且故障(当dll从应用程序调用回调函数时)崩溃:
MainProgram.exe中0x70786a46处的未处理异常:0xC0000005:访问冲突读取位置0x00000164。
调用堆栈mshtml.dll
使用IE控件来更新UI的应用程序。如何在Addinational应用程序回调时更新UI?
答案 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
的内容