<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    1.組件中必須有3個函數,QueryInterface、AddRef、Release,它們3個函數也組成一個接口,叫"IUnknown"

    2.組件API及接口指針中,除了IUnknown::AddRef()IUnknown::Release()兩個函數外,其它所有的函數,都以 HRESULT 作為返回值。

    3.原則:COM 組件是運行在分布式環境中的通俗地說,你不能直接把一個內存指針直接作為參數傳遞給COM函數。

    4.結果判斷一般用VC提供的宏:

    HRESULT hr = 調用組件函數;

    if( SUCCEEDED( hr ) ){...} // 如果成功

    if( FAILED( hr ) ){...} // 如果失敗

    5.Browser Helper Objects,我譯為"瀏覽器幫助者對象",以下皆簡稱BHO


    ==================================

    如果感覺不清楚,請先參看com組件應用(1),因為范例是從上例中改造過來的。


    還是用具體范例來講:computer_def.h

    #include <Unknwn.h>

    #define UUID_ICOMPUTER __declspec( uuid( "9DC95DDC-FF98-4afe-B17E-42F028E34F68" ) )
    class UUID_ICOMPUTER Icomputer: public IUnknown
    {
    public:
        
    virtual int add(int a, int b ) = 0;    
    };


    #define UUID_ICOMPUTEREX __declspec( uuid( "3B8BF613-7AF1-4672-9EC3-E5DC49A6E8D9" ) )
    class UUID_ICOMPUTEREX IcomputerEx: public IUnknown
    {
    public:
        
    virtual int sub(int a, int b ) = 0;    
    };

    實現類:

    class Ccomputer : 
        
    public Icomputer,
        
    public IcomputerEx

    {
    public:
        
    virtual HRESULT STDMETHODCALLTYPE QueryInterface( 
            
    /* [in] */ REFIID riid,
            
    /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
        {
            
    if(riid == __uuidof(Icomputer))
            {
                
    *ppvObject = (Icomputer*)(this);
            }

            
    else if(riid == __uuidof(IcomputerEx))
            {
                
    *ppvObject = (IcomputerEx*)(this);
            }

            
    return S_OK;
        }

        
    virtual ULONG STDMETHODCALLTYPE AddRef( void)
        {
            m_nRef
    ++;
            
    return m_nRef;
        }

        
    virtual ULONG STDMETHODCALLTYPE Release( void)
        {
            m_nRef
    --;

            
    if(0 == m_nRef)
            {
                delete 
    this;
            }

            
    return 0;
        }

        
    virtual int add(int a, int b)
        {
            
    return a + b;
        }
        
    virtual int sub(int a,  int b)
        {

            
    return a - b;
        }
    private:
        ULONG m_nRef;

    };

    使用上:

    Icomputer *pComputer;

      IcomputerEx 
    *pComputerEx;

      HMODULE hDll 
    = ::LoadLibrary(TEXT("computer.dll"));
      
      typedef HRESULT (__stdcall 
    *PFN_DllGetClassObject)(Icomputer** ppv);

      PFN_DllGetClassObject pDllGetClassObject 
    = (PFN_DllGetClassObject)::GetProcAddress(hDll, "DllGetClassObject");
      
      
    if(NULL == pDllGetClassObject)
      {
       
    //nRet = STATUS_SEVERITY_ERROR;
      }

      
    // 創建接口
      HRESULT hRet = pDllGetClassObject(&pComputer);
      
      
    if(FAILED(hRet))
      {
       
    //nRet = STATUS_SEVERITY_ERROR;
      }


    ……



     
    int iRet = pComputer->add(iNum_1,iNum_2);
       
       pComputer
    ->QueryInterface(__uuidof(IcomputerEx),(void**)&pComputerEx);

       
    //pComputerEx = (pComputerEx)(pC);

       iRet 
    = pComputerEx->sub(iNum_1,iNum_2);

     

    闡述總結:繼承IUnknown 接口,實現其中方法。 這樣就可以通過QueryInterface 來查詢接口,并使用其中的函數。

    posted on 2009-08-18 21:27 -274°C 閱讀(1029) 評論(0)  編輯  收藏 所屬分類: C++

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊

    JAVA網站

    關注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914374
    • 排名 - 40

    最新評論

    主站蜘蛛池模板: 亚洲国产成人九九综合| 国产性爱在线观看亚洲黄色一级片 | 一区二区在线免费观看| 亚洲情XO亚洲色XO无码| 国产特黄特色的大片观看免费视频| 国产传媒在线观看视频免费观看| 男男gay做爽爽的视频免费| 免费一级毛片正在播放| 黄页网站在线免费观看| 亚洲中文字幕无码爆乳AV| 久久精品成人免费观看97| 亚洲精品国偷自产在线| 麻豆精品成人免费国产片| 亚洲情a成黄在线观看动漫尤物| 久久免费精彩视频| 亚洲毛片基地日韩毛片基地| 噼里啪啦免费观看高清动漫4 | 亚洲成a∨人片在无码2023| 国产一级淫片视频免费看| 国产特黄一级一片免费| 亚洲精品福利视频| 在线看片无码永久免费视频| 亚洲精品成a人在线观看夫 | 国产精品免费一级在线观看| 直接进入免费看黄的网站| 国产亚洲人成网站在线观看| 久久中文字幕免费视频| 亚洲乱码一区av春药高潮| 日韩视频免费在线| 精品人妻系列无码人妻免费视频| 亚洲国产一区二区a毛片| 无码人妻久久一区二区三区免费丨 | 免费毛片在线视频| 国产午夜精品理论片免费观看| 久久精品九九亚洲精品| 国产又粗又长又硬免费视频| 99精品视频免费| 亚洲www在线观看| 国产中文在线亚洲精品官网| 69视频在线观看高清免费| 成人婷婷网色偷偷亚洲男人的天堂 |