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

多くの Microsoft DirectX コンポーネント オブジェクト モデル (COM) インターフェイスでは、各メソッド用にマクロが定義されています。これらのマクロは、アプリケーションでのメソッドの使用を簡略化します。これらのマクロの定義は、インターフェイス定義と同じヘッダー ファイル内にあります。マクロは、C および C++ アプリケーションの両方で使用できるように設計されています。C++ マクロを使用するには、_cplusplus を定義する必要があります。それ以外の場合は、C マクロが使用されます。マクロの構文は両方の言語で同じですが、ヘッダー ファイルには、適切な呼び出し規則に拡張する別々のマクロ定義のセットが含まれています。

たとえば、次の d3d.h ファイルのコードの抜粋は、IDirect3D9::GetAdapterIdentifier メソッド用の C マクロと C++ マクロの定義を示しています。

...
#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)
...
#else
...
#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)
...
#endif

これらのいずれかのマクロを使用するには、まず、関連付いているインターフェイスへのポインターを取得する必要があります。マクロの最初のパラメーターは、ポインターに設定する必要があります。残りのパラメーターは、メソッドのパラメーターに割り当てます。マクロの戻り値は、メソッドによって返される HRESULT 値となります。

次のコードでは、マクロを使用して IDirect3D9::GetAdapterIdentifier メソッドを呼び出します。pD3DIDirect3D9 インターフェイスへのポインターであることに注意してください。

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