Posted on 2009-09-15 16:43
S.l.e!ep.¢% 閱讀(364)
評論(0) 編輯 收藏 引用 所屬分類:
COM
在HTML中使用了 <OBJECT style="display:none;" TYPE="application/x-oleobject" classid=clsid:xxxxx CODEBASE="xxxxx.cab#Version=1,0,0,1"></OBJECT>
在每次刷新網頁的時候,總是會提示下載控件
檢查過 C:\WINDOWS\Downloaded Program Files
控件的狀態居然是 unknown ???
經過無數次的嘗試后,發現 是
classid 寫錯了
在程序的 xxxx.idl
library IxxxLib
{
?importlib("stdole32.tlb");
?importlib("stdole2.tlb");
?[
??uuid(xxxxxx),??????????????????? 在 inf 和 html 里寫的 classid 應該是這個才對,?改完之后,不會再每次都提示下載了
??helpstring("xxxx Class")
?]
?coclass xxxx
改好之后,在HTML調用 new ActiveXObject () 方法,但老提示 '創建失敗'
search 資料,發現COM需要實現 IObjectSafety 接口
#include <objsafe.h> // for IObjectSafety; in ActiveX SDK
#include <atlctl.h>? // 如果出現"'IObjectSafetyImpl' : base class undefined"的錯誤,則需要添加"atlctl.h"頭文件。
引入這兩個頭文件
類繼承這個接口
public IObjectSafetyImpl<xxxxxx, INTERFACESAFE_FOR_UNTRUSTED_CALLER| INTERFACESAFE_FOR_UNTRUSTED_DATA>
BEGIN_COM_MAP(xxxxx)
? ……
?COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()
編譯,終于OK了。