Microsoft DirectX 8.0 (C++)

マクロによる DirectX COM メソッドの呼び出し

Microsoft® 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::GetAdapterIdentifier メソッドを呼び出している。pD3D は、IDirect3D8 インターフェイスへのポインタである。

hr = IDirect3D8_GetAdapterIdentifier(pD3D,
                                     Adapter,
                                     dwFlags,
                                     pIdentifier);