Atl 重载 objsafe接口

5 篇文章 0 订阅
4 篇文章 0 订阅

参考来源:http://blog.csdn.net/sstower/article/details/6586687

                   http://www.cnblogs.com/fujinliang/archive/2012/11/27/2791695.html


为了使的IE使用ocx时跳过第一个弹框通过注册表“SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN"修改实现

            

                //修改注册表  //处理为了有利于保护安全性
HKEY hKey = NULL;
char str[MAX_PATH];
DWORD num = sizeof(str), index = 0, rc;
DWORD dwValue = 0;  

#define  MAINKEY HKEY_LOCAL_MACHINE    
#define SUBKE "SOFTWARE\\Microsoft\\Internet Explorer\\MAIN\\FeatureControl\\FEATURE_LOCALMACHINE_LOCKDOWN"
REGSAM samDesiredOpen = KEY_ALL_ACCESS;
if (Is64BitSystem())
{
samDesiredOpen |= KEY_WOW64_64KEY; 
printf("x64\n");
}
else
{
samDesiredOpen |= KEY_WOW64_32KEY;
printf("x32\n");
}
rc = ::RegOpenKeyEx(MAINKEY, SUBKE, 0, samDesiredOpen, &hKey);
if (rc == ERROR_SUCCESS)
{
RegSetValueEx(hKey, "iexplore.exe", 0, REG_DWORD, (CONST BYTE*)&dwValue, sizeof(DWORD));
RegCloseKey(hKey);
}
else
{
printf("Can't Open The Key!\n");
}



bool Is64BitSystem()
{
SYSTEM_INFO lpSystemInfo; 
typedef VOID(WINAPI *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress(GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo");;
if (NULL != fnGetNativeSystemInfo)
{
fnGetNativeSystemInfo(&lpSystemInfo);
}
else
{
GetSystemInfo(&lpSystemInfo);
} ;


if (lpSystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
lpSystemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
{
return TRUE;
}
return FALSE;


为了使的IE使用ocx时跳过第二个弹框因此要在atl实现类里添加objsafe接口

只要3步骤即可:

class ATL_NO_VTABLE CFirst :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CFirst, &CLSID_First>,
public IDispatchImpl<IFirst, &IID_IFirst, &LIBID_ATLProject4Lib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
//add--1
public IObjectSafetyImpl<CFirst, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>
//--
{

 

BEGIN_COM_MAP(CFirst)
COM_INTERFACE_ENTRY(IFirst)
COM_INTERFACE_ENTRY(IDispatch)
//add--2
COM_INTERFACE_ENTRY(IObjectSafety) 

//--
END_COM_MAP()

 

DECLARE_PROTECT_FINAL_CONSTRUCT()
//add--3
STDMETHODIMP GetInterfaceSafetyOptions(REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions){
ATLTRACE(_T("Cwebpy::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("Cwebpy::GetInterfaceSafetyOptions()\n"));
return S_OK;
}

//----

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值