S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

COM 组件在HTML使用的问题

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


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理