控件IObjectSafety 的问题
大家好:
写了个控件,IE会有风险提示,想去掉的话,要做 IObjectSafety和签名,签名已经做了,可控件的 IObjectSafety要怎样实现啊?
看了一些文件
实现IObjectSafety
在IE6以及更高版本的浏览器中我们还必须实现IObjectSafety接口才能保证自己开发的ocx控件不会被IE禁用
怎么实现呢?其实很简单,加上几句话就可以了
①打开ActFrm的头文件,我们最开始的时候已经在这个Form上面加了一个按钮,打开它的头文件后可以看到一个类class TAcFrm 不要管它,跟它没有什么关系,接着往下看,可以看到类似
class ATL_NO_VTABLE TActFrmImpl:
VCLCONTROL_IMPL(TActFrmImpl, ActFrm ..........)之类的代码,我们在括号之后再给他加个接口
加完之后类似这样
class ATL_NO_VTABLE TActFrmImpl:
VCLCONTROL_IMPL(TActFrmImpl, ActFrm ..........),public IObjectSafetyImpl<TActFrmImpl,INTERFACESAFE_FOR_UNTRUSTED_CALLER>
注意不要丢了public前面的逗号,多重继承必须的
②然后再 void InitializeControl(){}函数结束之后加入
BEGIN_CATEGORY_MAP(TActFrmImpl)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()
③BEGIN_COM_MAP(TActFrmImpl)
VCL_CONTROL_COM_INTERFACE_ENTRIES(IActiveFrmX)
COM_INTERFACE_ENTRY(IObjectSafety)//加入这样一行就ok了
END_COM_MAP()
编译通过,应该没有问题
兄弟,安全控件那还得继承一个,正确的语句应该是:
,public IObjectSafetyImpl<TActiveFormXImpl,INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
不然还是弹出对话框
我跟着做了,可这是不成功。请教一下大家,以上的全吗?
[解决办法]
http://support.microsoft.com/kb/164119
[解决办法]
帮顶一下!!