COM库中用于创建组件的三个函数
来源:互联网 发布:mac 查看所有进程 编辑:程序博客网 时间:2024/05/22 15:35
3个函数:
1.CoGetClassObject
2.CoCreateInstance
3.CoCreateInstanceEx
CoGetClassObject
1.创建一个类厂,
2.进程内组件对象,CoGetClassObject调用DLL模块的DLLGetClassObject引出函数创建类厂;
3.进程外组件,CoGetClassObject函数启动组件进程,一直等到组件进程它支持的COM类对象的类厂注册到COM中。
CoCreateInstance
创建COM对象
HRESULTCoCreateInstance(constCLSID& clsid,
IUnknown *pUnknownOuter,
DWORD dwClsContext,
constIID& iid,
(void **)ppv);
CoCreateInstance实现伪码
HRESULTCoCreateInstance(constCLSID& clsid,IUnknown
*pUnknownOuter,DWORD dwClsContedt,
constIID& iid,void *ppv)
{
IClassFactory *pCF;
HRESULT hr;
hr = CoGetClassObject(clsid,dwClsContext,NULL,
IID_IClassFactory,(void*)pCF);
if (FAILED(hr))
return hr;
hr = pCF->CreateInstance(pUnkOuter,iid,(void*)ppv);
pCF->Release();
return hr;
}
CoCreateInstanceEx
创建COM对象
HRESULTCoCreateInstanceEx(constCLSID& clsid,
IUnknown *pUnknownOuter,
DWORD dwClsContext,
COSERVERINFO *pServerInfo,
DWORD dwCount,
MULTI_QI *rgMultiQI);
三个创建函数选用原则
(1)如果客户创建远程对象或者希望一次获取对象的多个接口指针,则选用CoCreateInstanceEx函数;
(2)如果客户希望获取类厂对象或者要调用类厂的某些成员函数,则选用CoGetClassObject函数;
(3)在其他情况下,使用CoCreateInstance函数创建对象。
客户程序调用COM库创建组件对象的顺序
通过CoCreateInstance调用CoGetClassObject;
COM库找到DLL程序并进入进程;
调用DllGetClassObject函数;
DllGetClassObject创建类厂;
DllGetClassObject函数把类厂接口指针返回给CoGetClassObject函数;
CoGetClassObject函数把类厂接口指针返回给CoCreateInstance函数;
CoCreateInstance函数得到类厂后,调用类厂的对象创建函数CreateInstance;
类厂创建COM对象;
类厂把COM对象返回给CoCreateInstance, CoCreateInstance函数返回COM对象接口指针给客户;
客户直接调用COM对象。
- COM库中用于创建组件的三个函数
- COM组件编程—IUnknown的三个接口函数
- js中用于数字的函数
- C++中用于输入的几个函数
- tablet os 和BB10中用于处理多媒体的组件
- 创建COM组件的原理
- 创建COM组件的实现(或者叫作注册Com组件)
- escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法.
- CString 的Format函数中用于转换的格式字符
- matlab中用于小数取整的函数的用法
- matlab中用于数据的标准化处理的zscore函数
- COM组件三个最基本的接口类
- COM组件三个最基本的接口类 //VC6中使用COM库的三种方法
- ASP中用于获取当前页面URL的函数
- Format函数中用于转换的格式字符
- OpenCV中用于图片显示的函数参数说明
- OpenCV中用于摄像头视频读取的函数说明
- OpenCV中用于摄像头视频读取的函数说明
- 我眼中的csdn
- JS原型与原型链终极详解
- 27. Remove Element
- Django 数据模型字段及属性
- 分类算法3----线性判别分析(LDA)原理和推导过程
- COM库中用于创建组件的三个函数
- Android简单本地视频播放器
- 面向过程和面向对象的理解
- CSS3 2D转换
- MySQL的备份
- AvatarView头像
- 蓝桥杯:三部排序
- Java内存分布
- activemq的高可用(zookeeper+leveldb)主从集群