全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2342
推到 Plurk!
推到 Facebook!

[VC]ActiveX事件無法被javascript截取

缺席
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-06 11:58:15 IP:59.124.xxx.xxx 訂閱
我利用VC2005的wizard建立了一個ActiveX元件,該元件有三層結構,依序為APP->Ctrl->PropPage。
其中Ctrl為COleControl,是建立與javascript溝通的類別。
我利用VC2005的IDE建立了一個事件叫void OnStartAction();,同時建立一個Method BtnMethod(void);供javascript呼叫:
[code cpp]
void CMyOcxCtrl::BtnMethod()
{
this->OnStartAction();//OnStartAction
}
[/code]
並利用以下javascript片段測試此事件是否被正常呼叫。

[code java]

confirm("OnStartAction Event is called");

[/code]
此事件OnStartAction被正常的呼叫,沒有問題。
但在我的程式中會有其它的事件來執行Ctrl的事件(如上述的OnStartAction),因此我為Ctrl撰寫一個static method以供自訂的事件當成Ctrl的入口。
[code cpp]
static void CMyOcxCtrl::EventDispatcher(EVENT_DISP ed)//EVEN_DISP為自訂的列舉型別
{
switch(ed)
{
edStartAction:
{
CMyOcxCtrl::pInstance->OnStartAction();
::MessageBox(NULL, "Fire StartAction Event", "", MB_OK);
}
edXXX: //for other event;
}
}
[/code]
MessageBox只是一個測試的用途,用來驗證該條件已進入,且MessageBox前的敘述被執行。
CMyOcxCtrl::pInstance可視為該class唯一的object reference。
但在MessageBox跳出時,該事件未被引發(按前面javascript,會跳出一個對話框,說明onStartAction事件已收到)

這裡就是我的問題,在static method裡面去執行引發事件的函式,但該事件沒有被引發。
我有測過pInstance是否存在,若不存在,則IE會引發Access Violation。
想請教各位ActiveX的事件為何未被引發?
此問題雖然我已經利用Window Message的方式解決,但還是想知道為什麼,謝謝各位。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
編輯記錄
Coffee 重新編輯於 2009-04-06 11:59:36, 註解 無‧
Coffee 重新編輯於 2009-04-06 12:00:25, 註解 無‧
系統時間:2024-04-19 11:26:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!