COM库提供的API 函数产生GUID:
HRESULT CoCreateGuid(GUID *pguid);
IUnknown的定义(IDL接口描述语言)
interface IUnknown
{
HRESULT QueryInterface([in] REFIID iid,[out] void * *ppv);
ULONG AddRef(void);
ULONG Release(void);
}
对QueryInterface的返回信息:
S_OK,查到指定接口
E_NOINTERFACE ,对象不支持的接口
E_UNEXPECTED,发生意外错误
COM采用了本地过程调用(LPC)和远过程调用(RPC)的方法进行进程间的通信。
接口IClassFactory定义(C++)
class IClassFactory : public IUnknown
{
virtual HRESULT _stdcall CreateInstance(IUnknown *pUnknownOuter,const IID&iid,void * *ppv) = 0;
virtual HRESULT _stdcall LockServer(BOOL bLock) = 0;
};
在COM库中有三个API函数可以用于对象的创建,它们分别是CoGetClassObject、CoCreateInstance、CoCreateInstanceEx.
COM库的初始化HRESULT CoInitialize(IMalloc *pMalloc); 如返回S_OK表明初始化成功,如返回S_FALSE表情初始化虽然成功,但不是第一次初始化。
如返回E_UNEXPECTED表明初始化中出现错误。pMalloc设为NULL,COM库将使用缺省提供的内存分配器。
COM库的终止函数void CoUninitialize(void)
COM的可重用性包括:包容和聚合
包容:其实就是一个COM对象作为客户程序,另外一个COM对象作为服务程序,在客户程序中使用服务程序。
聚合:其实就是一个COM对象引出另外一个COM对象的接口。
下接COM编程 笔记2