COM编程 笔记1

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

 

posted @ 2010-06-09 09:48  zhouli  阅读(259)  评论(0编辑  收藏  举报