<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    ocx控件避免彈出警告的類--2

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    本文與 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全部要換成你的控件的類名

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全