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