描述:
我用ATL写了一个DLL在浏览器上修改了IE的安全项,也能弹出下载注册对话框,但显示为该控不安件全的。
请问如何解决这个问题,先谢谢各位了
解决方案1:
在BEGIN_COM_MAP(CM7_CmpCtrl)和END_COM_MAP()中添加COM_INTERFACE_ENTRY(IObjectSafety)
在控件类声明之后添加:
public IObjectSafetyImpl<CM7_CmpCtrl,INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
再在BEGIN_COM_MAP(CM7_CmpCtrl)和END_COM_MAP()后添加
BEGIN_CATEGORY_MAP(CM7_CmpCtrl)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()
在你组件类的头文件中添加两个地方
class ATL_NO_VTABLE (你的组件类名):
public IObjectSafetyImpl<(你的组件类名),INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
//放在最后
BEGIN_COM_MAP(CCTieDaoCA)
COM_INTERFACE_ENTRY(IObjectSafety)//添加这个到最后
END_COM_MAP()
CATID_SafeForScripting,CATID_SafeForInitializing
解决方案4: 在你的组件中加上:
Begin_CATEGORY_MAP(你的组件类名)
IMPLEMENTED_CATEGORY(CATED_SafeForScripting)
IMPLEMENTED_CATEGORY(CATED_SafeForInitializing)
END_CATEGORY_MAP()
声明脚本安全:
BEGIN_CATEGORY_MAP(CMyCtrl)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()
实现控件安全:
class ATL_NO_VTABLE CMyCtrl :
public IObjectSafetyImpl<CMyCtrl, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>
BEGIN_COM_MAP(CMyCtrl)
COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()