2011-04-28 100 views
1

我试图让2个不同的浏览器通过使用JS window.external的本地代码主机(C++)相互通信。是否有可能从不同的线程调用JS函数?

语法是这样的:

上destination.js:

window.external.register("dest", eventCallbak); 
function eventCallback(senderID, data) { 
    alert("message recieved from " + senderID + " with data of " + data); 
} 

上source.js:

window.external.sendMsg("source", "dest", "Hello dest! this is source..."); 

我已经成功地这样做同步,通过保存eventCallback参数,将其保存为IDispatch,并在询问时调用它(全部在同一个线程中)。那里没有问题。试图这样做异步时,意味着

的烦恼开始 - 保存eventCallback作为一个线程的IDispatch,并在另一个线程以后调用它,导致invoke方法失败的E_UNEXPECTEDHRESULT

任何想法?

谢谢,

回答

2

两个浏​​览器实例使用JS VM的不同实例。 您通常无法从一个VM /堆中获取一个对象,并将其传递给另一个VM /堆。因此你需要在这里发明某种编组。

+0

是的,最终我用CoMarshalInterThreadInterfaceInStream来解决它。 谢谢! – Omer 2011-04-30 18:23:04

相关问题