2011-04-28 42 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

相關問題