(一二三)

来源:互联网 发布:软件测试分类方法 编辑:程序博客网 时间:2024/04/20 22:09

<objbase.h> : #define interface struct

interface IUnkown

{

        virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv)=0;

        virtual ULONG __stdcall AddRef() = 0;

        virtual ULONG __stdcall Release()=0;

}

IUnkown 指针的获取:

  IUnkown * CreateInstance()

IUnkown 包含 QueryInterface(),AddRef(),ReleaseRef(),三个函数。所有COM组件都要继承这个类,此类并非虚拟类。

QueryInterface() 对所有的 IUnkown 接口查询请求必须返回相同的指针。

关于QueryInterface() 的实现规则:

  1、QueryInterface 返回的总是同一 IUnkown指针。

    组件的实例只有一个IUnkown 接口。

  2、若客户曾经获取过某个接口,那么它将总能获取此接口。

    这条规则选用于组件的某个特定实例,当创建组件的一个新实例时,此规则不适用。

  3、客户可以再次获取已经拥有的接口。

    为什么要再次获取已经拥有的接口?所有的接口都继承了 IUnkown ,而许多函数都需要一个 IUnkown 指针作为参数。它们应该能够使用任何 IUnkown 指针来获取任何接口。

  4、客户可以返回到起始接口。

    若客户拥有一个IX接口指针并成功地使用它来查询一个IY接口,那么它可以使用此IY接口来查询一个IX接口。

  5、若能从某个接口获取某特定接口,那么可以从任意接口都将可以获取此接口。

    若可以通过IX=>IY,IY=>IZ,那么 IX=>IZ。

QueryInterface 定义了组件,是COM最为重要的部分。组件所支持的接口是 QueryInterface 能够为之返回指针的那些接口。这是由QueryInterface 的实现决定。

 

何时要建立一个新版本?当下面条件中的任何一个改变时,就应该给接口指定新的ID:

  1、接口中函数的数目。

  2、接口中函数的顺序。

  3、某个函数的参数。

  4、某个函数的参数顺序。

  5、某个函数的参数类型。

  6、函数可能的返回值。

  7、函数返回值的类型。

  8、函数参数的含义。

  9、接口中函数的含义。

  

原创粉丝点击