Posted on 2009-09-15 16:43
S.l.e!ep.¢% 阅读(360)
评论(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了。