setlocale必須

CommandLineToArgvW() の練習。

#define UNICODE
#define _UNICODE

#include <windows.h>

int main(int argc, char *argv[])
{
  LPWSTR cmdLine;
  LPWSTR *wargv;
  int wargc;
  int i;

  cmdLine = GetCommandLineW();
  wargv = CommandLineToArgvW(cmdLine, &wargc);

  for (i = 0; i < wargc; i ++) {
    wprintf(L"Argument[%d] = %s\n", i, wargv[i]);
  }

  GlobalFree((HGLOBAL)wargv);
  
  return 0;
}

次はコンパイルとテスト。

D:\foo>gcc arg_test.c

D:\foo>a.exe
Argument[0] = a.exe

D:\foo>a.exe abc def 日本語 ghi
Argument[0] = a.exe
Argument[1] = abc
Argument[2] = def
Argument[3] = Argument[4] = ghi

あれ? 日本語が表示されない。

#include <locale.h>
/* 省略 */
int main(int argc, char *argv[])
{
  /* 省略 */
  setlocale(LC_ALL, "");
  /* 省略 */
}

最初に setlocale() が必要だった。