用宏调用DirectX COM 的方法
很多微软的DirectX接口为每一种方法定义了一个宏,这样在你的应用程序中使用这些方法会更简单一些。你会发现这些宏定义在接口声明的头文件中。这些宏被设计成在c中的宏和在c++中的宏。如果你想使用在c++中的宏,你必须定义__cplusplus.否则你将使用在c中的宏。宏的语法在两种语言当中是相同的,但是在头文件中它们是分开定义的,以便适当的对呼叫约定进行扩充。
例如:下面的代码段从d3d.h头文件中显示了为IDirect3D8::GetAdapterIdentifier 方法定义的c宏和c++宏。
#if !defined(__cplusplus) || defined(CINTERFACE)
...
#define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
...
#else
...
#define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
...
#endif
使用这些宏,你首先必须得到相关接口的指针。宏的第一个参数必须设置为这个指针,余下的参数对应着方法中的参数。宏的返回值是一个HRESULT类型的,这个值就是宏所对应的方法的返回值。下面的代码段用了一个宏来呼叫IDirect3D8::GetAdapter(dentifier方法,pD3D是指向IDirect3D8接口的指针。
hr = IDirect3D8_GetAdapterIdentifier(pD3D,
Adapter,
dwFlags,
pIdentifier);
注: 由于翻译水平有限,错误在所难免。如发现翻译的不对的地方还请路上的朋友指正,谢谢
可以任意转载。
译者: closeall
MSN: closeall@hotmail.com
e_mail: closeall@126.com
2005.09.05 译