CoCreateInstanceEx函數使用

CoCreateInstanceEx常用於創建遠程組件,因爲考慮到遠程訪問時要在網絡上來回傳遞信息,所以此函數允許一次詢多個接口。

CoCreateInstanceEx參數說明
共有如下六個參數,分別爲:
REFCLSID   rclsid:指定要實例化COM組件的GUID
IUnknown   *punkOuter:
DWORD   dwClsCtx:指定服務器組件的類型,可以爲以下值:
CLSCTX_INPROC_SERVER:指明組件與客戶端程序運行在同一進程中,組件服務器是一個DLL。如果組件遠行在遠和計算機上,將在本地啓動一個代理服務器程序或代理。
CLSTX_INPROC_HANDLER:指明組件是一個遠程的,但有本地客戶羰程序的類結構的實現。
CLSCTX_LOCAL_SERVER:指明服務器程序是一個本地的可執行文件;因此,運行在一個單獨的里程中。
CLSCTX_REMOTE_SERVER:指明組件服務器運行在不同的遠程計算機上,組件是在遠程計算機上創建和管理的。

COSERVERINFO   *pServerInfo:指明服務器信息,它爲一個結構,定義如下:
typedef   struct     _COSERVERINFO
{
    DWORD   dwReserved1; //保留
    LPWSTR   pwszName; //指定遠程計算機名
    COAUTHINFO     *pAuthInfo; //
    DWORD   dwReserved2; //保留
}   COSERVERINFO;
   
ULONG   cmq:指明要查詢接口的個數。
MULTI_QI   *pResults:用於接收查詢到的接口,可以爲數組,以接收多個接口。
2.2.2. CoCreateInstanceEx調用實例:
HRESULT   hr   ;
COSERVERINFO   si   ;
MULTI_QI   mqi   [2]   ;
WCHAR*   wServerName   =   L "192.168.0.1 ";
TCHAR   szBuffer[512];
ICM* pICM   =   NULL;
ICA* pICA   =   NULL;

::ZeroMemory(&szBuffer,   512);
si.pwszName   =   wServerName   ;
si.dwReserved1   =   0   ;
si.pAuthInfo   =   NULL   ;
si.dwReserved2   =   0;

mqi   [0].pIID   =   &IID_ICM   ;
mqi   [0].pItf   =   NULL   ;
mqi   [0].hr   =   0   ;

mqi   [1].pIID   =   &IID_ICA;
mqi   [1].pItf   =   NULL   ;
mqi   [1].hr   =   0   ;

hr   =   CoCreateInstanceEx   (
    CLSID_Account,
    NULL,
    CLSCTX_LOCAL_SERVER,
    &si,
    2,
    mqi)   ;

if   (hr   !=   S_OK)
{
    ::MessageBox(m_hWnd,   “組件實例化失敗!”,   "錯誤 ",   MB_ICONSTOP)   ;
    return   FALSE;
}

pICM   =   (ICM*)   mqi[0].pItf   ;
pICA   =   (ICA*)   mqi[1].pItf   ; 

CoCreateInstance的用法
CoCreateInstance
HRESULT __stdcall CoCreateInstance(
    const CLSID& clsid,
    IUnknown* pIUnknownOuter,
    DWORD dwClsContext,
    const IID& iid,
    void** ppw
    );

dwClsContext值:

CLSCTX_INPROC_SERVER
 客戶希望創建在同一進和中運行的組件。爲能夠同客戶在同一進程中運行,組件必須
是在DLL中實現的。
CLSCTX_INPROC_HANDLER
客戶希望創建進程中處理器。一個進程中處理器實際上是一個只實現了某個組件一部分的
進程中組件。該組件的其他部分將由本地或遠程服務器上的某個進程外組件實現。
CLSCTX_LOCAL_SERVER
客戶希望創建一個在同一機器上的另外一個進程中運行的組件。本地服務器由EXE實現的。

CLSCTX_REMOTE_SERVER
客戶希望創建一個在遠程機器上運行的組件。此標誌需要分佈式COM正常工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章