首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

控件IObjectSafety 的有关问题

2012-02-09 
控件IObjectSafety 的问题大家好:写了个控件,IE会有风险提示,想去掉的话,要做 IObjectSafety和签名,签名已

控件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
[解决办法]
帮顶一下!!

热点排行