感谢此篇博客。找了很久没有找到IObjectSafety需要添加哪些代码,这篇代码很详细。
MFC OCX控件实现安全初始化和脚本安全的方法
原文有两个方法,我更推荐用IObjectSafety,原博客的代码不太好看,我这里整理一下。
我的环境是VS2013,用模板生成的项目包含的文件基本相同,不构成影响。一般如下结构:
假定我们用模板生成的项目名叫[TestOCX],所以马赛克部分应该都是TestOCX。相应的,本文涉及的两个文件分别为TestOCXCtrl.h和TestOCXCtrl.cpp。 如果需要,则请将代码中的TestOCXCtrl替换成各位自己的名字。
- 在TestOCXCtrl.h中添加如下代码
#include <objsafe.h> // for IObjectSafety; in ActiveX SDK
这个代码是实现IObjectSafety的前提。
- 依然是在TestOCXCtrl.h中,一般在类的构造函数前有一行
DECLARE_DYNCREATE(CTestOCXCtrl)
在这行代码前添加如下代码:
#pragma region objsafe
//*******************************************************add begin
//ISafeObject
DECLARE_INTERFACE_MAP()
BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)
STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (
/* [in] */ REFIID riid,
/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,
/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions
);
STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (
/* [in] */ REFIID riid,