三九宝宝网宝宝教育智力培养

想开发一个游戏。。。不知道用什么软件。。

01月06日 编辑 39baobao.com

DirectX 是按照微软的COM(Component Object Model) 搭起来的。设计COM是希望它 能提供一个更安全,易升级,可移植的软件模块。COM用的面向对象的模式比一般的 C++更严格。例如,COM只能永远通过成员函数(member function)进行访问,并且不 能拥有公用数据成员(public data members)

COM异常严格地对待对象(object)和接口(interface). 而且就不让你直接访问对象, COM竟然都不给对象起名字,让你老老实实通过接口来访问对象。在DirectDraw编程 中,我们讲:“访问对象”,其实都是在访问接口。叫惯了也就不改了。

所有的COM接口都从 IUnknown 接口中派生出来。“I”打头是COM接口的标识(I for Interface). 所有的DirectDraw接口都以“I”打头,但莫明其妙的是在很多编程手 册中都把“I”略去。所以看书时要做到心中有爱(I)。

IUnknown 接口提供三个成员函数,其余所有的COM接口,都继承这三个函数。 AddRef() Release() QueryInterface()

AddRef() 和 Release() 支持COM的一个特色功能,名字叫“活着封装”(lifetime encapsulation). “活着封装”是一个协议,用来让对象在崩溃时(destruction)自 己负责自己的后事。

“活着的时候”(lifetime) 每个对象内部有一个值用来跟踪记载自己用过的指针(pointer) ,或引用(reference)。当这个对象建立时,该值为1。然后随着对它的调用/被调用, 该值递增。反之递减。当本身崩溃时(destroy itself),该值为0。

AddRef()就是用来加计数器的。你可能不用亲自调用它。你在用DirectDraw API 时, AddRef()就被自动调用了。

Release()则是对着干。减值。你常常要亲自用到它,因为程序可能会异常退出AddRef的 作用域(scope)。如出错控制中。

QueryInterface()用来问COM一个接口是否可用。如可用,则返回一个相应接口的指 针。

问对象是否支持一个接口用QueryInterface, 那么怎么问?当然要知道接口的ID。 我们用GUID来表示,GUID = Globally Unique IDentifier. (全局单一证认)。GUID是 一个128bits的数。所有DirectX中接口的GUID值都可在DirectX的头文件中找到。

推荐阅读
图文推荐