(转)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正常工作。
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正常工作。
相关文章推荐
- 动态链接库
- 电子签章
- 深入理解HTTP Session
- [TwistedFate]高级内存管理 多态
- SlidingMenu 在Android Studio使用详解
- 封装获取上月、本月、近15天、近30天方法
- iOS中使用Masonry的简介
- Android 一张图看明白Hander的运行机制
- hdu 1556 Color the ball(前缀和)
- 职员)2015-11-09 星期一 日志
- Scala第四章学习笔记(面向对象编程)
- ios崩溃日志分析
- Thoughtworks笔试
- django+nginx+uwsgi 搭建环境
- 调用 BitmapFactory.decodeByteArray 函数返回 null 值
- python学习笔记-Day03 -第一部分(collections,Counter,defaultdict,namedtuple)
- [转][BLOG][插头DP]
- Java 写文件 写excel
- AngularJs权威教程 读书笔记
- 线程和进程的通俗解释