Platform SDK: DirectX |
リップル起動とは、それ自体がロビーによって起動された別のアプリケーションからアプリケーションを実行することである。以下の説明では、ロビーによって実行されるプログラムをランチャと呼び、ランチャが起動するプログラムをアプリケーションと呼ぶ。
アプリケーションでリップル起動をサポートするためには、IDirectPlayLobby3::RegisterApplication に DPAPPLICATIONDESC2 構造体を渡して、そのアプリケーションを登録する必要がある。この構造体には、ランチャの名前を保持する lpszAppLauncherName というメンバが含まれている。ランチャはアプリケーションと同じディレクトリに位置している必要がある。
ロビー クライアントが IDirectPlayLobby3::RunApplication を呼び出してアプリケーションを実行すると、DirectPlay はレジストリ内でランチャの名前を検索し、アプリケーションではなく、ランチャを実行する。アプリケーションを実行するのはランチャの役目である。
ランチャは、渡されたコマンドライン パラメータをアプリケーションにすべて渡す必要がある。アプリケーションは、理解できないコマンドライン パラメータを単純に無視する。
アプリケーションは、IDirectPlayLobby3::WaitForConnectionSettings を使用する前に、最低 1 回は必ず IDirectPlayLobby3::GetConnectionSettings を呼び出す (「動的ロビー接続のサポート」を参照)。
以下の例は、リップル起動のアプリケーションを登録する方法を示している。lpDPLobby3A は、IDirectPlayLobby3 インターフェイスを示している。
DPAPPLICATIONDESC2 dpad2; dpad2.dwSize = sizeof (DPAPPLICATIONDESC2); dpad2.dwFlags = 0; dpad2.lpszApplicationNameA= "MyApp"; dpad2.guidApplication = {12345678-...}; dpad2.lpszFilenameA= "myapp.exe"; dpad2.lpszCommandLineA= "/lobbied"; dpad2.lpszPathA= "C:\\games"; dpad2.lpszCurrentDirectoryA= "C:\\games"; dpad2.lpszDescriptionA= "My Application"; dpad2.lpszDescriptionW= L"My Application"; dpad2.lpszAppLauncherNameA= "launcher.exe"; HRESULT hr = lpDPLobby3A->RegisterApplication(0, &dpad2);
以下の例は、Duel サンプルを起動する完全なコンソール アプリケーションである。
#include <windows.h> #include "stdio.h" int main(int argc, char* argv[]) { PROCESS_INFORMATION ProcInfo; STARTUPINFO StartupInfo; BOOL bCreated; LPTSTR lpCommandLine; printf("Launcher application\n"); lpCommandLine = GetCommandLineA(); // EXE 名をコマンド ラインから取り除き、 // 残りをリップル起動アプリケーションに渡す。 while(*lpCommandLine && *lpCommandLine!= ' ') lpCommandLine++; printf("passing command line: %s\n",lpCommandLine); memset(&StartupInfo,0,sizeof(StartupInfo)); StartupInfo.cb = sizeof(StartupInfo); bCreated=CreateProcessA( "duel.exe", lpCommandLine, NULL, NULL, TRUE, 0, NULL, NULL, &StartupInfo, &ProcInfo); if(bCreated){ printf("Waiting for application to exit\n"); WaitForSingleObject(ProcInfo.hThread, INFINITE); } else { printf("Failed to create process\n"); } printf("launcher application has left the building...\n"); return 0; }
アプリケーションでリップル起動をサポートするためには、DirectPlayLobby3.RegisterApplication に DPAPPLICATIONDESC2 型を渡して、そのアプリケーションを登録する必要がある。この型には、ランチャの名前を保持する strAppLauncherName というメンバが含まれている。ランチャはアプリケーションと同じディレクトリに位置している必要がある。
ロビー クライアントが DirectPlayLobby3.RunApplication を呼び出してアプリケーションを実行すると、DirectPlay はレジストリ内でランチャの名前を検索し、アプリケーションではなく、ランチャを実行する。アプリケーションを実行するのはランチャの役目である。
ランチャは、渡されたコマンドライン パラメータをアプリケーションにすべて渡す必要がある。アプリケーションは、理解できないコマンドライン パラメータを単純に無視する。
アプリケーションは、DirectPlayLobby3.WaitForConnectionSettings を使用する前に、最低 1 回は必ず DirectPlayLobby3.GetConnectionSettings を呼び出す (「動的ロビー接続のサポート」を参照)。
以下の例は、リップル起動のアプリケーションを登録する方法を示している。DPLobby3 は、DirectPlayLobby3 オブジェクトである。
Dim dpad2 As DPAPPLICATIONDESC2 With dpad2 .lFlags = 0 .strAppLauncherName= "launcher.exe" .strApplicationName= "MyApp" .strCommandLine= "/lobbied" .strCurrentDirectory= "C:\games" .strDescription= "My Application" .strFilename= "myapp.exe" .strGuid = "{AC330441-9B71-11D2-9AAB-0020781461AC}" .strPath= "C:\games" End With Call DPLobby3.RegisterApplication(dpad2)