Platform SDK: DirectX

IDirectPlay4::CreatePlayer

IDirectPlay4::CreatePlayer メソッドは、カレント セッションにローカル プレーヤーを作成する。

HRESULT CreatePlayer(
  LPDPID lpidPlayer,
  LPDPNAME lpPlayerName,
  HANDLE hEvent,
  LPVOID lpData,
  DWORD dwDataSize,
  DWORD dwFlags
);

パラメータ

lpidPlayer
DirectPlay プレーヤー ID が設定される変数へのポインタ。この値は、DirectPlay により定義される。
lpPlayerName
プレーヤーの名前が設定されている DPNAME 構造体へのポインタ。NULL が設定されている場合は、プレーヤーに初期設定名がないことを示す。lpPlayerName の名前はユーザーが使用するためだけに設定する。システム内では使用されないので、一意でなくてもかまわない。
hEvent
プレーヤー宛てに設定されたメッセージが受信されたときに DirectPlay からその通知を受けたアプリケーションにより作成されるイベント オブジェクト。
lpData
プレーヤー ID に関連付けるアプリケーションにより定義されたデータのブロックへのポインタ。NULL が設定されている場合は、プレーヤーに初期データがないことを示す。ここで指定したデータは、IDirectPlay4::SetPlayerData が呼び出された場合と同じように、セッション内のその他すべてのアプリケーションに伝播されるリモート データであると見なされる。
dwDataSize
LpData パラメータのポイント先データ ブロックのサイズ (バイト単位)。
dwFlags
作成するプレーヤーのタイプを示すフラグ。デフォルト (dwFlags = 0) は、観客ではなく、サーバーでもないプレーヤーを示す。
DPPLAYER_SERVERPLAYER
プレーヤーは、クライアント/サーバー通信のサーバー プレーヤーである。サーバー プレーヤーを作成できるのは、ホストだけである。1 つのセッションに存在できるサーバー プレーヤーは 1 人だけである。このフラグが指定されている場合、CreatePlayer からは DPID_SERVERPLAYER のプレーヤー ID が必ず返される。
DPPLAYER_SPECTATOR
プレーヤーは観客として作成される。観客 プレーヤーは、観客としてフラグが設定されることを除けば、通常のプレーヤーと同じである。アプリケーションで、観客 プレーヤーの機能を制限できる。観客 プレーヤーの動作はすべて、アプリケーションが定義する。DirectPlay は、ただこのフラグを伝播するだけである。

戻り値

成功した場合は DP_OK を返す。失敗した場合は、次のエラー値のいずれかを返す。

DPERR_CANTADDPLAYER
DPERR_CANTCREATEPLAYER
DPERR_CONNECTIONLOST
DPERR_INVALIDFLAGS
DPERR_INVALIDPARAMS
DPERR_NOCONNECTION

注意

1 つのプロセスで、複数のローカル プレーヤーが、同じコンピュータの他のプレーヤーやリモート コンピュータのプレーヤーと DirectPlay オブジェクトを介して通信することが可能である。

処理が正常に終了すると、このメソッドは、新規プレーヤーがセッションに参加したことを知らせる DPMSG_CREATEPLAYERORGROUP システム メッセージをセッションの他のすべてのプレーヤーに送信する。デフォルトでは、すべてのローカル プレーヤーはすべてのシステム メッセージのコピーを受信する。

メッセージの受け渡しやデータの関連付けでプレーヤーを識別するときは、アプリケーションに返されるプレーヤー ID を使用する。DirectPlay により割り当てられたプレーヤー ID やグループ ID はセッション内で常に一意である。

プレーヤーを作成したアプリケーションでのみ、次の処理が可能である。

アプリケーションがセッションを閉じた場合、作成されたローカル プレーヤーはすべて自動的に破棄される。IDirectPlay4::DestroyPlayer を使用すると、プレーヤーを作成したセッション ホストやアプリケーションはいつでもそれを破棄できる。

アプリケーションが DirectPlay メッセージを取得するのに別のスレッドを使用した場合、NULL以外の hEvent を指定して、それを同期処理で使用することを強く推奨する。このイベントは、プレーヤーがメッセージを受信すると設定される。メッセージ受信スレッド内で、プレーヤーがメッセージを持っているかどうかを判定するには、スレッド内の Win32® API WaitForSingleObject を使用する (または、複数のイベントが使用されている場合は WaitForMultipleObjects を使用する)。メッセージを待っている別のスレッド内の IDirectPlay4::Receive でループ処理を行うのは非効率的である。すべてのローカル プレーヤーで同じイベントを使用することも、プレーヤーごとに別のイベントをアプリケーションで指定することも可能である。イベントの作成、破棄は、アプリケーションの役割である。詳細については、「同期」を参照すること。

必要条件

  Windows NT/2000 : Windows 2000 が必要。
  Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
  ヘッダー : dplay.h で宣言。
  インポート ライブラリ : dplayx.lib を使用。

参照

DPNAMEDPMSG_CREATEPLAYERORGROUPIDirectPlay4::DestroyPlayerIDirectPlay4::EnumPlayersIDirectPlay4::ReceiveIDirectPlay4::SendIDirectPlay4::SetPlayerDataIDirectPlay4::SetPlayerNameIDirectPlay4::GetPlayerFlags