ActiveX 添加測試工程
1.新建工程MFC application,
2.添加完畢,在main Dialog中, 右鍵[Insert Activex Control],選擇你的ActiveX控件。
3.選中你剛剛添加的控件,然后右鍵[add variable]
m_ocx就是控件的instance object,點擊[完成],可以看到在XXXDlg.h中會添加這個instance object的定義。
ipcamerctrl1.h
ipcamerctrl1.cpp
{
InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
//==============================
接下來是關鍵了, 有時候,我們自己修改控件中的interface,
但是*.h *.cpp *.odl(vs2010是*.idl) 中interface沒有匹配,比如*.h 中 修改了,funcA(int, int); 而*.odl 為funcA(int), 就容易造成錯誤。一般也無法編譯。
但是除了interface不匹配,還有其他的問題, 就是上文所說的生成 ipcamerctrl1.h 的問題
*.odl
*.cpp
// Dispatch map
BEGIN_DISPATCH_MAP(CIPCamVideoCtrl, COleControl)
END_DISPATCH_MAP()
*.h
public:
enum {
//{{AFX_DISP_ID(CIPCamVideoCtrl)
dispidFuncA = 1L,
dispidFuncB = 2L,
.............
}
這里不得不說經常修改控件的時候,容易遺漏,但是當時編譯器沒有報錯,怎么辦呢?
出錯情況
非常折磨人。 如何規避這種情況呢?
答案就是
改完之后,定義的形參 會多出一個選項 dispid,
添加這個dispid后,外部測試工程中接口用的就是enum的值
如果有刪除修改的錯誤,編譯時也會及時報出來
http://bbs.csdn.net/topics/310061638
里面應該不是 AboutBox()的問題,而是某個dispid 順序出現錯誤。
所以我鎖定問題的時候,才會想起嘗試 確定dispid值。來排除[非選擇性參數]的問題。(一切都是自己嘗試出來的)
另說明一下,vs2010 通過添加接口,已經全部用 DISP_FUNCTION_ID 格式,
寫下這個只是給自己mark一下,順便BS下MS,出現這種錯誤,沒有文檔,很難找原因。
===============
另vc6.0創建的ActiveX控件, 通過vs2010 添加測試工程,[Insert Activex Control]后, vs2010 Crash T_T
(但是我VS2010創建的ActiveX控件,用VS2010 添加測試工程則沒有問題)
VS2005則正常,時間原因暫且不管,可能也因為VC6.0、VS2010里面各種設置導致的。
有人知道,可以告訴我下原因