VC6.0 MFC方式的OCX 去除安全警告框
2013-11-22 15:29
127 查看
1、在XXXCtl.h 中加入以下内容
2、在GnGenralHandlerCtl.cpp中加入如下内容,对比发下内容在相关位置添加代码
按以上添加就可以去除IE的安全警告框
#if !defined(AFX_XXXCTL_H__A4724BE9_A262_471D_ADF2_3BFE587B7078__INCLUDED_) #define AFX_XXXCTL_H__A4724BE9_A262_471D_ADF2_3BFE587B7078__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // XXXCtl.h : Declaration of the CXXXCtrl ActiveX Control class. ///////////////////////////////////////////////////////////////////////////// // CXXXCtrl : See XXXCtl.cpp for implementation. #include <objsafe.h> //去IE安全检测 class CXXXCtrl : public COleControl { DECLARE_DYNCREATE(CXXXCtrl) DECLARE_INTERFACE_MAP() BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)//去IE安全检测 STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (//去IE安全检测 REFIID riid, DWORD __RPC_FAR *pdwSupportedOptions, DWORD __RPC_FAR *pdwEnabledOptions ); STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (//去IE安全检测 REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions ); END_INTERFACE_PART(ObjSafe);//去IE安全检测 // Constructor public: CXXXCtrl(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CXXXCtrl) public: virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid); virtual void DoPropExchange(CPropExchange* pPX); virtual void OnResetState(); //}}AFX_VIRTUAL // Implementation protected: ~CXXXCtrl(); DECLARE_OLECREATE_EX(CXXXCtrl) // Class factory and guid DECLARE_OLETYPELIB(CXXXCtrl) // GetTypeInfo DECLARE_PROPPAGEIDS(CXXXCtrl) // Property page IDs DECLARE_OLECTLTYPE(CXXXCtrl) // Type name and misc status // Message maps //{{AFX_MSG(CXXXCtrl) // NOTE - ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() // Dispatch maps //{{AFX_DISPATCH(CXXXCtrl) // NOTE - ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_DISPATCH DECLARE_DISPATCH_MAP() // Event maps //{{AFX_EVENT(CXXXCtrl) // NOTE - ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_EVENT DECLARE_EVENT_MAP() // Dispatch and event IDs public: enum { //{{AFX_DISP_ID(CXXXCtrl) // NOTE: ClassWizard will add and remove enumeration elements here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_DISP_ID }; }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_XXXCTL_H__A4724BE9_A262_471D_ADF2_3BFE587B7078__INCLUDED)
2、在GnGenralHandlerCtl.cpp中加入如下内容,对比发下内容在相关位置添加代码
IMPLEMENT_OLECTLTYPE(CXXXCtrl, IDS_XXX, _dwXXXOleMisc) ///////////////////////////////////////////////////////////////////////////// // Interface map for IObjectSafety BEGIN_INTERFACE_MAP(CXXXCtrl, COleControl) INTERFACE_PART(CXXXCtrl, IID_IObjectSafety, ObjSafe) END_INTERFACE_MAP() ///////////////////////////////////////////////////////////////////////////// // IObjectSafety member functions // Delegate AddRef, Release, QueryInterface ULONG FAR EXPORT CXXXCtrl::XObjSafe::AddRef() { METHOD_PROLOGUE(CXXXCtrl, ObjSafe) return pThis->ExternalAddRef(); } ULONG FAR EXPORT CXXXCtrl::XObjSafe::Release() { METHOD_PROLOGUE(CXXXCtrl, ObjSafe) return pThis->ExternalRelease(); } HRESULT FAR EXPORT CXXXCtrl::XObjSafe::QueryInterface( REFIID iid, void FAR* FAR* ppvObj) { METHOD_PROLOGUE(CXXXCtrl, ObjSafe) return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj); } const DWORD dwSupportedBits = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA; const DWORD dwNotSupportedBits = ~dwSupportedBits; ///////////////////////////////////////////////////////////////////////////// // CXXXCtrl::XObjSafe::GetInterfaceSafetyOptions // Allows container to query what interfaces are safe for what. We're // optimizing significantly by ignoring which interface the caller is // asking for. HRESULT STDMETHODCALLTYPE CXXXCtrl::XObjSafe::GetInterfaceSafetyOptions( REFIID riid, DWORD __RPC_FAR *pdwSupportedOptions, DWORD __RPC_FAR *pdwEnabledOptions) { METHOD_PROLOGUE(CGnGenralHandlerCtrl, ObjSafe) HRESULT retval = ResultFromScode(S_OK); // does interface exist? IUnknown FAR* punkInterface; retval = pThis->ExternalQueryInterface(&riid, (void **)&punkInterface); if(retval != E_NOINTERFACE) { // interface exists punkInterface->Release(); // release it--just checking! } // we support both kinds of safety and have always both set, // regardless of interface *pdwSupportedOptions = *pdwEnabledOptions = dwSupportedBits; return retval; // E_NOINTERFACE if QI failed } ///////////////////////////////////////////////////////////////////////////// // CXXXCtrl::XObjSafe::SetInterfaceSafetyOptions // Since we're always safe, this is a no-brainer--but we do check to make // sure the interface requested exists and that the options we're asked to // set exist and are set on (we don't support unsafe mode). HRESULT STDMETHODCALLTYPE CXXXCtrl::XObjSafe::SetInterfaceSafetyOptions( REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions) { METHOD_PROLOGUE(CXXXCtrl, ObjSafe) // does interface exist? IUnknown FAR* punkInterface; pThis->ExternalQueryInterface(&riid, (void **)&punkInterface); if(punkInterface) { // interface exists punkInterface->Release(); // release it--just checking! } else { // interface doesn't exist return ResultFromScode(E_NOINTERFACE); } // can't set bits we don't support if(dwOptionSetMask & dwNotSupportedBits) { return ResultFromScode(E_FAIL); } // can't set bits we do support to zero dwEnabledOptions &= dwSupportedBits; // (we already know there are no extra bits in mask ) if((dwOptionSetMask & dwEnabledOptions) != dwOptionSetMask) { return ResultFromScode(E_FAIL); } // don't need to change anything since we're always safe return ResultFromScode(S_OK); } ///////////////////////////////////////////////////////////////////////////// // CXXXCtrl::CXXXCtrlFactory::UpdateRegistry - // Adds or removes system registry entries for CXXXCtrl BOOL CXXXrCtrl::CXXXCtrlFactory::UpdateRegistry(BOOL bRegister) { // TODO: Verify that your control follows apartment-model threading rules. // Refer to MFC TechNote 64 for more information. // If your control does not conform to the apartment-model rules, then // you must modify the code below, changing the 6th parameter from // afxRegApartmentThreading to 0. if(bRegister) { return AfxOleRegisterControlClass( AfxGetInstanceHandle(), m_clsid, m_lpszProgID, IDS_GNGENRALHANDLER, IDB_GNGENRALHANDLER, afxRegApartmentThreading, _dwGnGenralHandlerOleMisc, _tlid, _wVerMajor, _wVerMinor); } else { return AfxOleUnregisterClass(m_clsid, m_lpszProgID); } } ///////////////////////////////////////////////////////////////////////////// // CXXXCtrl::CXXXCtrl - Constructor
按以上添加就可以去除IE的安全警告框
相关文章推荐
- VC6.0 MFC创建OCX入门-详细完整流程(JS调用测试, 去除安全提示, exe打包)
- MFC OCX控件实现安全初始化和脚本安全的方法http://blog.csdn.net/xiliang_pan/article/details/8264685
- MFC OCX控件实现安全初始化和脚本安全的方法
- 在MFC中使用纯COM方式来操纵Flash OCX (IShockwaveFlash)
- 在MFC中使用纯COM方式来操纵Flash OCX (IShockwaveFlash)
- MFC ActiveX OCX控件添加安全接口
- MFC学习笔记之:VC6.0中通过向导添加的消息响应系统自动添加的代码及删除方式
- 外包 WCF 安全通讯的例子代码,WCF 电子证书,HTTPS方式运行的例子代码
- 去除VC6.0中使用STL时的warning C4786
- 在MFC中如何自定义消息及相应事件(VC6.0及VS2005)
- spring源码学习bean载入时的安全检测方式-threadlocal
- MFC创建快捷方式
- 尽量使用安全的转换方式qobject_cast,少用强制转换
- MFC 定时器使用方式
- 安卓退出应用的安全方式
- 字符串去除前后字符方式
- MFC中绘图的几种方式
- int类型转换成字符串和字符串转换成int类型以及在MFC静态文本框显示数字的方式方法
- iOS安全:反汇编(inline编译方式)
- VC MFC SDI/MDI框架各部分指针获取方式