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全部要換成你的控制元件的類名
相關文章
- 線上直播系統原始碼,彈出警告/提示類彈窗原始碼
- win10註冊ocx控制元件的操作方法_win10怎麼註冊ocx控制元件Win10控制元件
- 將 fastreport 封裝為 ocx 控制元件AST封裝控制元件
- 避免 ChatGPT 電腦版客戶端彈出強制登入的方法ChatGPT客戶端
- 系統程式彈出缺少chklsb26.ocx如何解決?
- WPF ContentMenu控制元件 這裡也可以彈出選單控制元件
- 技術分享 | MySQL 編寫指令碼時避免煩人的警告MySql指令碼
- win10 禁止彈出軟體安裝警告方法 如何關閉win10安裝軟體提示警告Win10
- 在 Vue 中如何避免在動態繫結 類 出現空 類 的情況?Vue
- win10系統執行lol出現炸彈人警告修復方法Win10
- 三行程式碼實現`年月日`的彈出控制元件行程控制元件
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- Windows系統安裝軟體出現找不到comct232.ocx或未註冊控制元件問題Windows控制元件
- 計算機軟體彈出缺少ComboBox.ocx檔案的解決辦法計算機
- win10 64位如何註冊richtx32.ocx_win10電腦註冊richtx32.ocx控制元件操作方法Win10控制元件
- 彈彈彈,彈走魚尾紋的彈出選單(vue)Vue
- 封裝OCX封裝
- 在ubuntu的QtCreator 出現提示Wayland警告UbuntuQT
- 視訊直播原始碼,提醒類彈窗,到時間後自動彈出原始碼
- 如何使用PHP彈出警告訊息框(示例詳解)PHP
- iOS自定義控制元件:精簡的底部彈框iOS控制元件
- 學習筆記(二十七):ArkUi-警告彈窗(AlertDialog)筆記UI
- [20210419]避免冗餘的輸出.txt
- win10怎麼關閉彈出警告_win10要如何關閉windows安全彈窗Win10Windows
- 6.85億次AI加速模擬,分析2萬種材料,Meta釋出催化劑資料集OCx24AI
- fastadmin 彈出視窗的功能AST
- Element修改彈窗類元件的層級元件
- Windows系統安裝軟體提示comct332.ocx未註冊或缺少控制元件問題Windows控制元件
- FTC釋出比特幣勒索詐騙警告比特幣
- 彈出視窗
- ASP.NET_頁面中彈出對話方塊幫助類ASP.NET
- XAML常用控制元件2控制元件
- C# 從登錄檔判斷指定ocx控制元件是否已註冊 以及獲取它的註冊路徑C#控制元件
- WPF 控制元件類派生關係控制元件
- 如何避免空指標出錯?指標
- 彈出層layer 完整步驟以及在編寫彈出層時遇到的錯誤
- 教育類app開發過程中,需要避免的問題APP
- 彈出視窗messagebox
- Prism 彈出視窗