簡體   English   中英

Active X控件自定義事件無法在Javascript中觸發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM