[英]Active X control custom events fail to fire in Javascript
我使用IDispatch接口編寫了一個自定義的主動X控件,該接口想與javascript通信。 我已經成功獲取了javascript-> COM路徑; 我可以在活動的x對象上調用javascript函數,並在dll中收到相應的INVOKE調用。
為了接收javascript方面的事件,我正在遵循本文中的建議: http : //jeffcode.blogspot.com/2008/02/how-to-create-activex-control-that.html
加載測試頁時,正如我期望的那樣,我會先調用FindConnectionPoint,再調用Advise。 當我在Advise提供的接口上調用Invoke時,我收到一條成功狀態消息,但是在js端什么也沒有發生!
這是我用來測試事件處理的javascript代碼:
function FooActiveX::ReceiveMessage(msg)
{
alert(msg);
}
有趣的是,如果我刪除了該鏈接,我將不再收到對FindConnectionPoint或Advise的調用,因此它正在執行某些操作。
關於如何調試此問題或嘗試嘗試的任何建議將非常有幫助。 謝謝!
我的idl接口定義文件如下所示:
[
uuid("1bf6bb1a-3232-11e4-a195-a6c5e4d22fb7"),
version(1.0),
]
library FooControlLib
{
interface IFooControl;
dispinterface DFooControlEvents;
importlib("stdole2.tlb");
[
uuid("1bf6bb1a-3232-11e4-a195-a6c5e4d22fb8"),
hidden
]
dispinterface DFooControlEvents
{
properties:
methods:
[id(DISPID_RECEIVEMESSAGE)] void ReceiveMessage( [in] BSTR msg );
}
[
odl,
dual,
uuid("1bf6bb1a-3232-11e4-a195-a6c5e4d22fb9"),
oleautomation
]
interface IFooControl : IDispatch
{
[id(DISPID_SENDMESSAGE)] HRESULT SendMessage( [in] BSTR msg);
}
[
uuid("1bf6bb1a-3232-11e4-a195-a6c5e4d22fc0")
]
coclass FooControl
{
[default] interface IFooControl;
[source, default] dispinterface DFooControlEvents;
}
}
編輯:似乎問題與ReceiveMessage方法中的參數有關。 如果刪除“ msg”參數,則警報框將正確顯示。
發現我的問題。 該方法的參數作為VARIANTARG結構的數組傳遞給Invoke。 我已經設置了值,但沒有設置該結構的vt成員,該成員用於標識參數的類型。 我不知道為什么invoke會返回OK狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.