COM 组件在HTML使用的问题

在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了。

你可能感兴趣的:(COM 组件在HTML使用的问题)