目前Windows平台下的开发,主要是以C++与COM接口配DirectX为主要方案。
COM(Component Object Model,组件对象模型)是一项能够使DirectX独立于编程语言并向下兼容的技术。我们常称COM对象为接口,可将其视为一个C++的类来使用。在以C++语言和COM接口方式开发的DirectX应用程序中,可以直接访问COM接口和对象。
COM接口对象说白了就是一组具有特定功能的抽象集合(COM接口其实就是定义了一组可供调用的函数)。应用程序无法直接访问COM接口对象,必须通过COM接口对象的接口的指针来执行COM接口对象的功能。
COM接口对象的接口是包含了函数指针数组的内存结构,其中每一个数组元素就是可以实现某一个功能的某一个组件的函数地址。类似于C++中的函数指针。
关于如何识别COM接口对象
COM接口对象一般都具有前缀大写字母“I”。例如管理X文件的COM接口叫做ID3DXFile。
关于与C++中指针的使用区别。
COM接口对象的接口没有new和delete这一套。COM接口对象有一个引用计数器,它通过控制对某对象的引用次数来决定其生命周期的(类似于C++中的智能指针)。
当创建一个COM接口对象时,对应接口的引用计数自动加一,当程序对对象引用结束的话,调用对象的Release方法将此接口的引用计数减一,如果引用计数不为0,那么这个COM接口对象在系统中占用的内存并没有被释放。只有当引用计数为0时,COM接口对象占用的内存才会被真正的释放。对于我们来说,只要每次在对象引用结束的时候,调用Release改变接口的引用计数即可,而不需要我们去释放COM对象在系统中占用的内存。
关于COM接口在DirectX中的知识了解这些就足够了。
如果想要深入了解COM接口对象,可以参阅《COM技术内幕》。