VS2008 ActiveX IObjectSavety IExpress打包cab,发布

来源:互联网 发布:数控编程代码大全 编辑:程序博客网 时间:2024/05/29 17:09

1. 实现IObjectSafety

IObjectSafety接口对ocx和COM组件的作用

这几天开发了一个ocx控件和几个COM组件给web组的人供js调用。但是这个ocx控件和组件被js调用后,在有的机器上可运行,有的机器上又不能运行,老弹出对象不支持此属性或方法。感觉很是诡异:要是不行,所有的机器都应该不行啊,怎么有的机器又可以呢?找原因找了好久,原来是浏览器安全设置对ocx控件和组件的影响,浏览器中级及以上的安全设置是禁用控件或其方法的。为了解决浏览器安全设置对控件的影响,必须在组件中加入IObjectSafety接口。如下为组件接口生成的代码,在代码块中加入红色的几句代码即可

 

class ATL_NO_VTABLE CATLTest :
 public CComObjectRootEx<CComMultiThreadModel>,
 public CComCoClass<CATLTest, &CLSID_ATLTest>,
 public IDispatchImpl<IATLTest, &IID_IATLTest, &LIBID_ATLProjectLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
 public IDispatchImpl<IATLAdd, &IID_IATLAdd, &LIBID_ATLProjectLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
 public IDispatchImpl<ISub, &__uuidof(ISub), &LIBID_ATLProjectLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,

 public IObjectSafetyImpl<这里填写接口类名即CATLTest,  INTERFACESAFE_FOR_UNTRUSTED_CALLER>

{
public:
 CATLTest()
 {
 }

DECLARE_REGISTRY_RESOURCEID(IDR_ATLTEST)


BEGIN_COM_MAP(CATLTest)
 COM_INTERFACE_ENTRY(IATLTest)
 COM_INTERFACE_ENTRY(IATLAdd)
 COM_INTERFACE_ENTRY(ISub)

COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()

注意:还要加上头文件:#include<atlctl.h>


原文:http://blog.163.com/danshiming@126/blog/static/10941274820114811312523/


2. 获取证书(测试环境自己产生,生产环境购买或者客户端安装根证书)

in Visual Studio 2008 Command Prompt
>makecert -ss ahdms -n "CN=hknaruto" -sv hknaruto.pvk -r hknaruto.cer

生成发行者证书

>cert2spc ahdms.cer ahdms.spc


3。产生cab

工具:iexpress

ukey.dll

ukey.inf


inf内容如下:

[version]
signature="$CHICAGO$"AdvancedINF=2.0
[Add.Code]
ukey.dll=ukey.dll
[ukey.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={对应的uuid}
DestDir=11
FileVersion=1,0,0,1
[RegisterFiles]
%11%\ukey.dll


打包成ukey.CAB


4.发布到服务器

html关键部分:

 <OBJECT ID="Ukey" CLASSID="CLSID:对应的uuid" codebase="ukey.CAB"></OBJECT>


0 0