Platform SDK: DirectX

リップル起動のサポート

リップル起動とは、それ自体がロビーによって起動された別のアプリケーションからアプリケーションを実行することである。以下の説明では、ロビーによって実行されるプログラムをランチャと呼び、ランチャが起動するプログラムをアプリケーションと呼ぶ。

[C++]

アプリケーションでリップル起動をサポートするためには、IDirectPlayLobby3::RegisterApplicationDPAPPLICATIONDESC2 構造体を渡して、そのアプリケーションを登録する必要がある。この構造体には、ランチャの名前を保持する 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;
}
[Visual Basic]

アプリケーションでリップル起動をサポートするためには、DirectPlayLobby3.RegisterApplicationDPAPPLICATIONDESC2 型を渡して、そのアプリケーションを登録する必要がある。この型には、ランチャの名前を保持する 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)