browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

COM学习笔记(2)

Posted by on 2004 年 04 月 01 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

接口描述语言IDL
它可以用于定义COM接口,也可以描述自定义的数据结构。对于接口成员函数,可以指定每个参数的类型、输入输出特性,甚至可以支持可变长度数组的描述。例如:

interface IMyInterface
{
  HRESULT func1();
  HRESULT func2([in]string);
  HRESULT func3([in]string, [out]string*);
};

VC中提供的工具MIDL可以将IDL接口描述文件(*.idl)编译成C/C++兼容的接口描述头文件(*.h)。

接口的内存模型
以IMyInterface为例,它的C++实现如下:

C++代码
  1. class IMyInterface   
  2. {   
  3.   virtual HRESULT func1() = 0;   
  4.   virtual HRESULT func2(string) = 0;   
  5.   virtual HRESULT func3(string, string*) = 0;   
  6. };  

相应的COM对象实现则为:

C++代码
  1. class CMyObject : public IMyInterface   
  2. {   
  3. public:   
  4.   CMyObject();   
  5.   ~CMyObject();   
  6.   virtual HRESULT func1();   
  7.   virtual HRESULT func2(string);   
  8.   virtual HRESULT func3(string, string*);   
  9. private:   
  10.   // 其它的成员   
  11. };  

此外,还需要实现一个创建COM对象实例的函数以将IMyInterface的接口指针和一个指向CMyObject对象的指针关联起来。这样在调用了该函数对接口指针初始化之后,就可以利用C++继承和多态的特性用借口来访问和操作这个COM对象了。

订阅本站

没有评论

(Required)
(Required, will not be published)