Windows unicode命令行argv

时间:2010-11-04 22:09:07

标签: c++ visual-studio winapi qt unicode

因此,进入新的千年我改写了我的c ++代码:

int main(int argc, wchar_t **argv)

如果使用Unicode或MBCS选项构建,那么当使用命令行arg运行应用程序时,直接或通过dbl-click传递给argv []的文件名是不可读的=在某些混合的中文字体中。

感谢您的评论 - 我将尝试在这里总结(z)e为搜索引擎。

  1. wmain(int argc,char **argv)只能用于命令行(子系统:控制台)app

  2. int winMain(int argc, wchar_t **argv)适用于gui(子系统:windows),但gui将其替换为自己的入口点。在Qt的情况下,这不起作用

    qtmaind.lib(qtmain_win.obj):错误LNK2019:函数_WinMain @ 16

  3. 中引用了未解析的外部符号_main

    解决方案似乎是使用main(int arc,char **argv)main(int argc,wchar_t**argv)但忽略argv。然后使用argv或NULL调用QApplication - 由于Qt内部调用GetCommandLine(),因此忽略argv。
    然后使用app.arguments返回已解析的参数 然后,如果需要,可以使用Qt的字符串函数将它们转换回wchar。

     QApplication app(argc, (char**)argv);  or  QApplication app(argc,NULL);  
     QStringList args = app.arguments();
    

    对不起,我最初没有标记这个Qt,因为我认为这不相关 如果有人想编辑它还包括如何在MFC中执行此操作 - 请执行此操作。

3 个答案:

答案 0 :(得分:16)

您需要为自己的入口点wmain命名:http://msdn.microsoft.com/en-us/library/fzc2cy7w(VS.80).aspx

答案 1 :(得分:4)

您可以使用GetCommandLine功能。

答案 2 :(得分:3)

试试这个:

#include <tchar.h>

int _tmain( int argc, TCHAR **argv )
{
  return 0;
}
使用UNICODE选项编译时,

_tmain定义为wmain,使用MBCS选项编译时,main定义为{{1}}。