0

クラス ウィザードを使用して ActiveX コントロールに、 という名前のカスタム イベントを追加しましたOutboundCallStateChanged。私の OLEControl クラスで次のものが生成されました。

.h ファイル

    class CIVR60Ctrl : public COleControl
    {
    ...
    public:

// Event maps
        //{{AFX_EVENT(CIVR60Ctrl)
        void FireOutboundCallStateChanged()
            {FireEvent(eventidOutboundCallStateChanged,EVENT_PARAM(VTS_NONE));}
        //}}AFX_EVENT
        DECLARE_EVENT_MAP()
    ...
    }

    // Dispatch and event IDs
    public:
        CMainDialog m_MainDialog;
        enum {
        //{{AFX_DISP_ID(CIVR60Ctrl)
        dispidToolTipText = 1L,
        dispidDial = 4L,
        dispidGetOutboundCallState = 6L,
        ...  
        dispidGetUserStatus = 13L,
        eventidOutboundCallStateChanged = 1L,
        //}}AFX_DISP_ID
        };
    };

.cpp ファイル内:

// Event map

BEGIN_EVENT_MAP(CIVR60Ctrl, COleControl)
    //{{AFX_EVENT_MAP(CIVR60Ctrl)
    EVENT_CUSTOM("OutboundCallStateChanged", FireOutboundCallStateChanged, VTS_NONE)
    //}}AFX_EVENT_MAP
END_EVENT_MAP()

わかりました、とてもいいです。別のクラス (COM オブジェクトだと思います) 内からその関数を使用しようとすると、次のようになります。

pMainClass->p_IVRCtrl->FireOutboundCallStateChanged();

IE8 がクラッシュし、タブが復元されたことが通知されます。ただし、 IVR60Ctrl クラス内で起動すると; うまくいっていると思います。

最初のケースでは、呼び出しが例外をスローすると思います。どんな種類かわかりません。でしか捕まえられなかったcatch(...)。なぜ機能しないのか、誰か教えてください。そして、これをキャッチできるように、これはどのタイプの例外をスローしますか?

編集:FireOutboundCallStateChanged()新しいスレッドから呼び出すことで例外を回避できました。今はクラッシュしませんが、起動したときに IE でイベントが本当に発生しているかどうかはわかりません。イベントがIEに到着したかどうかを確認するにはどうすればよいですか?

.html ファイルで、次のことを試します。

        <OBJECT name="ivr" ID="IVR601" WIDTH=973 HEIGHT=52 align="top"
            CODEBASE="IVR60.ocx"
            CLASSID="CLSID:01B5BC0F-A51D-4C47-B3E9-3DA1099750CE"
style="position:absolute; top:2px; left:10px;">
            <PARAM NAME="_Version" VALUE="65536">
            <PARAM NAME="_ExtentX" VALUE="23865">
            <PARAM NAME="_ExtentY" VALUE="2164">
            <PARAM NAME="_StockProps" VALUE="0">
        </OBJECT> 
        <script type="text/javascript">
            var ocx = IVR601;       

            function ivr::OutboundCallStateChanged(){
                alert("fired");
            }
        </script> 

しかしFireOutboundCallStateChanged()、ActiveX オブジェクトから呼び出すと、アラートが表示されないため、イベントをキャッチできないのか、イベントがまったく発生していないのかわかりません。

4

0 に答える 0