原來是想直接用c來寫個unicode程式, 卻發現MinGW gcc不支援wmain的寫法.
問了Google大神,結果還是沒有正式支援.
只好自己來workaround.
一開始查到的是可以在main自己call __wgetmainargs,再傳進去wmain裡面去.
可是這樣就變成main->wmain. 這樣有點醜.
就改成直接把entry point從c預設的,
(使用-nostartfiles 和 -Wl,-entry,_start)
變成自己來寫個function來處理,
處理完argc,argv後,再接回去 wmain 就好了.
這樣寫的缺點是可能有一些東西.並沒有被初始化.
要寫得比較完整應該要去參考 MinGW gcc 的 libcrt/crt/crt1.c
> gcc -O2 -nostartfiles -Wl,-entry,_start test.c
========================================
#include <stdio.h>
extern int _CRT_glob;
int wmain(int argc, wchar_t *argv[],wchar_t *envar[])
{
int i;
printf("m argc=%d\n",argc);
for (i=0;i<argc;i++) {
printf("%d:%S\n",i, argv[i]);
}
return 0;
}
int start()
{
int argc;
wchar_t **argv;
wchar_t **envar;
__wgetmainargs(&argc, &argv, &envar, _CRT_glob, NULL);
printf("s argc=%d\n",argc);
return wmain(argc,argv,envar);
}
========================================
更新: 附上自己根據crt1.c所修改出來的 minicrt.c