В свой элемент управления ActiveX с помощью мастера классов я добавил пользовательское событие с именем OutboundCallStateChanged
, В моем классе OLEControl сгенерировано следующее:
.ч файл
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 я не получаю предупреждение, поэтому я не знаю, могу ли я поймать событие или оно вообще не вызывается.
Задача ещё не решена.
Других решений пока нет …