ocx控制元件避免彈出警告的類–2
本文與 OCX控制元件避免彈出安全警告的類 http://www.cnblogs.com/lidabo/archive/2013/03/26/2981852.html 有些類似,只不過增加了幾行程式碼(紅色標註)
1.要加一個標頭檔案:
#include <objsafe.h>
2.在控制元件標頭檔案中加入:
//////////////////////////////////////////////////////////////////////////
//安全介面實現
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,
/* [in] */ DWORD dwOptionSetMask,
/* [in] */ DWORD dwEnabledOptions
);
END_INTERFACE_PART(ObjSafe);
//////////////////////////////////////////////////////////////////////////
3.在控制元件的CPP檔案中加入:
//////////////////////////////////////////////////////////////////////////
//安全介面實現
BEGIN_INTERFACE_MAP( CFaceFinderOcxCtrl, COleControl )
INTERFACE_PART(CFaceFinderOcxCtrl, IID_IObjectSafety, ObjSafe)
END_INTERFACE_MAP()
//…………………………………………………………………..
// IObjectSafety member functions
// Delegate AddRef, Release, QueryInterface
ULONG FAR EXPORT CFaceFinderOcxCtrl::XObjSafe::AddRef()
{
METHOD_PROLOGUE(CFaceFinderOcxCtrl, ObjSafe)
return pThis->ExternalAddRef();
}
ULONG FAR EXPORT CFaceFinderOcxCtrl::XObjSafe::Release()
{
METHOD_PROLOGUE(CFaceFinderOcxCtrl, ObjSafe)
return pThis->ExternalRelease();
}
HRESULT FAR EXPORT CFaceFinderOcxCtrl::XObjSafe::QueryInterface(
REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(CFaceFinderOcxCtrl, ObjSafe)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
const DWORD dwSupportedBits =
INTERFACESAFE_FOR_UNTRUSTED_CALLER |
INTERFACESAFE_FOR_UNTRUSTED_DATA;
const DWORD dwNotSupportedBits = ~ dwSupportedBits;
//…………………………………………………………………..
// CStopLiteCtrl::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
CFaceFinderOcxCtrl::XObjSafe::GetInterfaceSafetyOptions(
REFIID riid,
DWORD __RPC_FAR *pdwSupportedOptions,
DWORD __RPC_FAR *pdwEnabledOptions)
{
METHOD_PROLOGUE(CFaceFinderOcxCtrl, 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
}
/////////////////////////////////////////////////////////////////////////////
// CStopLiteCtrl::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
CFaceFinderOcxCtrl::XObjSafe::SetInterfaceSafetyOptions(
REFIID riid,
DWORD dwOptionSetMask,
DWORD dwEnabledOptions)
{
METHOD_PROLOGUE(CFaceFinderOcxCtrl, 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);
}
//////////////////////////////////////////////////////////////////////////
//OK!不會再彈出那個“與ActiveX控制元件互動不安全“的對話方塊了~~~
//其中CFaceFinderOcxCtrl全部要換成你的控制元件的類名
相關文章
- 網頁控制元件OCX網頁控制元件
- 線上直播系統原始碼,彈出警告/提示類彈窗原始碼
- 用olldbg破解,分析ocx控制元件LLDB控制元件
- win10註冊ocx控制元件的操作方法_win10怎麼註冊ocx控制元件Win10控制元件
- 編寫在瀏覽器中不彈出警告的ActiveX控制元件瀏覽器控制元件
- Android 用PopupWindow實現彈出警告框的複用類Android
- 第 16 章 彈出框和警告框外掛
- Excel檔案彈出隱私問題警告的解決方法Excel
- 將 fastreport 封裝為 ocx 控制元件AST封裝控制元件
- mfc ocx 控制元件開發需要注意的問題控制元件
- javascript實現點選彈出確認刪除警告框程式碼JavaScript
- 避免 ChatGPT 電腦版客戶端彈出強制登入的方法ChatGPT客戶端
- 系統程式彈出缺少chklsb26.ocx如何解決?
- vs2008 下如何開發.ocx控制元件的方法控制元件
- 在 Vue 中如何避免在動態繫結 類 出現空 類 的情況?Vue
- 技術分享 | MySQL 編寫指令碼時避免煩人的警告MySql指令碼
- win10 禁止彈出軟體安裝警告方法 如何關閉win10安裝軟體提示警告Win10
- win10系統執行lol出現炸彈人警告修復方法Win10
- 點選文字框下拉彈出日曆控制元件程式碼控制元件
- 彈彈彈,彈走魚尾紋的彈出選單(vue)Vue
- iOS:提示框(警告框)控制元件UIAlertView的詳解iOS控制元件UIView
- 三行程式碼實現`年月日`的彈出控制元件行程控制元件
- 自定義彈幕控制元件控制元件
- “網路9·11”發出的警告
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- Windows10系統怎麼註冊OCX控制元件【圖文教程】Windows控制元件
- JavaScript+DIV製作彈出警告視窗效果JavaScript
- 視訊直播原始碼,提醒類彈窗,到時間後自動彈出原始碼
- 用UIPresentationController來寫一個簡潔漂亮的底部彈出控制元件UIController控制元件
- win10 64位如何註冊richtx32.ocx_win10電腦註冊richtx32.ocx控制元件操作方法Win10控制元件
- 封裝OCX封裝
- 用VB編寫一個彈出選單類 (轉)
- 在ubuntu的QtCreator 出現提示Wayland警告UbuntuQT
- 計算機軟體彈出缺少ComboBox.ocx檔案的解決辦法計算機
- 如何使用PHP彈出警告訊息框(示例詳解)PHP
- Windows系統安裝軟體出現找不到comct232.ocx或未註冊控制元件問題Windows控制元件
- jsp呼叫ocxJS
- Oracle 11gR2 警告檔案的位置Oracle