Microsoft DirectX 8.0 (C++)

DirectPlay オブジェクトとの通信

Microsoft® DirectPlay® は、本質的には COM オブジェクトの 1 つのコレクションで構成されている。各オブジェクトは、DirectPlay のいろいろな面を制御するための 1 つ以上のインターフェイスを公開する。たとえば、DirectPlay ピア オブジェクト (CLSID_DirectPlay8Peer) は、ピアツーピア ゲームの管理に使用される。

DirectPlay オブジェクトと通信するには、オブジェクトのインターフェイスが公開するメソッドを呼び出す。たとえば、ピアツーピア ゲームで別のユーザーに何らかのデータを送信するには、IDirectPlay8Peer::SendTo メソッドを呼び出してメッセージを送信する。そして DirectPlay によって、ターゲットにメッセージが届けられる。

DirectPlay は、1 つまたは複数のコールバック関数を介してユーザーのアプリケーションと通信する。これらの関数は原則として、使い慣れた Window プロシージャと類似している。アプリケーションはコールバック関数を実装し、初期化時に、関数へのポインタを DirectPlay に渡す。DirectPlay がアプリケーションと通信する必要があるときは、コールバック関数を呼び出して、情報の 2 つの主要項目に渡す。

たとえば、上記の例で送信されたメッセージがターゲットに到着すると、ターゲット アプリケーションのコールバック関数は、メッセージが別のユーザーから送られたことを示す、DPNMSGID_RECEIVE メッセージ ID の付いたメッセージを受け取る。付随する構造体にはデータが格納されている。

DirectPlay メッセージングの多くはマルチスレッドで実行されるため、コールバック関数は正しく実装することが重要である。