ATL 实现IObjectSafety接口

本文介绍如何通过ATL实现IObjectSafety接口以避免浏览器安全提示。通过继承IObjectSafetyImpl类并设置特定标志,可以确保ActiveX控件在加载时不触发浏览器的安全警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 实现IObjectSafety接口之后,浏览器就不会再弹出是否允许运行之类的对话框,MFC ACTIVEX控件中添加IObjectSafety接口是直接实现其中的某些方法,而ATL对IObjectSafety接口做了一个简单的实现,是用 template实现的,
template <class T, DWORD dwSupportedSafety>
class IObjectSafetyImpl,见 http://msdn2.microsoft.com/en-us/library/zh7ka3c2.aspx
所以在ATL中可以直接继承这个类就等于实现了IObjectSafety接口。
如下面的类CDispComSn类。其中对GetInterfaceOptions函数也做了简单的重载,当然,不重载可以使用某些选项达到目的,具体见:
下面copy了整个类的代码,以方便理解:
class ATL_NO_VTABLE CDispComSn :
 public CComObjectRootEx<CComSingleThreadModel>,
 public CComCoClass<CDispComSn, &CLSID_DispComSn>,
 public IDispatchImpl<IDispComSn, &IID_IDispComSn, &LIBID_ComputerIdLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
 public IObjectSafetyImpl<CDispComSn,INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>//这是需要手工添加屏蔽安全对话框
   
{
public:
 CDispComSn()
 {
 }
DECLARE_REGISTRY_RESOURCEID(IDR_DISPCOMSN)

BEGIN_COM_MAP(CDispComSn)
 COM_INTERFACE_ENTRY(IDispComSn)
 COM_INTERFACE_ENTRY(IDispatch)
 COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()
 
 DECLARE_PROTECT_FINAL_CONSTRUCT()
 HRESULT FinalConstruct()
 {
  return S_OK;
 }
 void FinalRelease()
 {
 }
 STDMETHODIMP GetInterfaceSafetyOptions( REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions){
  ATLTRACE(_T("CDispComSn::GetInterfaceSafetyOptions()/n"));
  *pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
  *pdwEnabledOptions = *pdwSupportedOptions;
  return S_OK;
 }
 STDMETHODIMP GetInterfaceSafetyOptions( REFIID riid, DWORD *dwOptionSetMask, DWORD dwEnabledOptions){
  ATLTRACE(_T("CDispComSn::GetInterfaceSafetyOptions()/n"));
  return S_OK;
 }
public:
public:
 STDMETHOD(GetHardDiskSn)(BSTR* pComSn);
public:
 STDMETHOD(GetCpuSn)(BSTR* pValCpuSn);
public:
 STDMETHOD(GetNetcardSn)(BSTR* pValNetcardSn);
public:
 STDMETHOD(GetBiosSn)(BSTR* pValBiosSn);
};
OBJECT_ENTRY_AUTO(__uuidof(DispComSn), CDispComSn)
实现了IObjectSafety接口之后,即使IE的options中的高级里面的安全采用default setting,那么也不会再提醒你所谓的是否允许运行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值