您的位置:首页 > 其它

(转)CoCreateInstanceEx使用详解

2015-11-09 17:57 309 查看
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正常工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: