CK4918

如果你看到面前的阴影,别怕,那是因为你的背后有阳光

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  8 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

类工厂
由于COM组件可以运行在客户进程之外,而且可以被不同语言访问,因此现需要一种语言无关的方法来实例化一个组件。COM提供了接口IclassFactory来完成这个用途,该接口是一个特殊的,必须实现的构造器组件,使用它才能让外部客户创建自己的组件实例。其包括两个方法:
CreateInstance:创建指定组件类的实例并返回该实例返回的接口
HRESULT CreateInstance(
IUnknown
* pUnkOuter,
REFIID riid,
void ** ppvObject
);

LockServer:在内存种锁定一台服务器,通常是处于性能考虑
HRESULT LockServer(
BOOL
fLock
);


在上面的代码中,CoGetClassObject返回请求的组件(由CLSID标示出来)的类工厂,类工厂创建组件实例并返回所需要的接口,接口调用方法。

在注册表HKEY_CLASSES_ROOT子键CLSID中存放了系统安装的所有组件的描述信息。其主要的注册表主键项如下

  1. ProgID:为COM类指定ProgID串,它不能包含多于39个字符串,但是可以包含句号
  2. InprocServer32:包含32位DLL路径和文件名,如果此键值不存在,则系统在PATH路径寻找组件位置
  3. VersionIndependentProgID:指定组件的最新版本
  4. LocalServer32:包含32位EXE文件的路径和文件名
  5. CurVer:组件类最新版本的ProgId
C++中关于COM的宏

COM和ATL使用了很多宏来隐藏不同平台的实现细节,COM接口的声明和定义可以使用四种宏:

  1. STDMETHOD
  2. STDMETHODIMP
  3. STDMETHOD_
  4. STDMETHODIMP_

在一个接口中定义纯虚方法如:
virtual long Add(long n1,long n2)=0
在COM 中,每一个接口方法都应该返回HRESULT,因此上述方法就变为
virtual HRESULT Add(long n1,long n2,long *pval)=0
COM中对应这样定义
STDMETHOD(Add)(long n1,long n2,long *pval) PURE;
#define PURE =0
STDMETHOD宏的主要作用在于为方法实现预设HRESULT返回类型

posted on 2008-03-28 07:49 成彭无敌 阅读(543) 评论(0)  编辑 收藏 引用 所属分类: atl/com

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理