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