使用 Unicode 时出现 C++ wmain 函数错误
C++ wmain function error when using Unicode
我曾尝试使用 wmain
作为简单的测试代码来练习 WCS 字符串(不是 MBCS),但我一直出错,但找不到原因。
这是我的代码。
#include <iostream>
#include <stdio.h>
using namespace std;
int wmain(int argc, wchar_t * argv[])
{
for (int i = 1; i < argc; i++) {
fputws(argv[i], stdout);
fputws(L"\n", stdout);
}
return 0;
}
它给出了错误信息。
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
为什么会崩溃?我不知道为什么会出现这个错误。
wmain
是一个 Visual C++ 语言扩展,用于处理 Windows.
中的 UTF-16 编码命令行参数
然而,现代 MinGW g++(您正在使用的编译器)通过选项 -municode
.
支持它
对于不支持它的编译器,您可以轻松编写几行调用 Windows' GetCommandLineW
和 CommandLineToArgvW
的标准 main
,然后调用一个 wmain
函数。
调用 wmain
的标准 main
示例,如上图所示:
#ifdef USE_STD_MAIN
#include <stdlib.h> // EXIT_...
#include <windows.h> // GetCommandLineW, CommandLineToArgvW
#include <memory> // std::(unique_ptr)
auto main()
-> int
{
int n_args;
wchar_t** p_args = CommandLineToArgvW(GetCommandLineW(), &n_args );
if( p_args == nullptr )
{
return EXIT_FAILURE;
}
const auto cleanup = []( wchar_t** p ) { LocalFree( p ); };
try
{
std::unique_ptr<wchar_t*, void(*)(wchar_t**)> u( p_args, cleanup );
return wmain( n_args, p_args );
}
catch( ... )
{
throw;
}
}
#endif
try
-catch
的目的似乎没有做任何事情,是为了保证像 u
这样的局部变量的析构函数调用是为调用 wmain
.
免责声明:我刚刚编写了该代码。它没有经过广泛的测试。
我曾尝试使用 wmain
作为简单的测试代码来练习 WCS 字符串(不是 MBCS),但我一直出错,但找不到原因。
这是我的代码。
#include <iostream>
#include <stdio.h>
using namespace std;
int wmain(int argc, wchar_t * argv[])
{
for (int i = 1; i < argc; i++) {
fputws(argv[i], stdout);
fputws(L"\n", stdout);
}
return 0;
}
它给出了错误信息。
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status
为什么会崩溃?我不知道为什么会出现这个错误。
wmain
是一个 Visual C++ 语言扩展,用于处理 Windows.
然而,现代 MinGW g++(您正在使用的编译器)通过选项 -municode
.
对于不支持它的编译器,您可以轻松编写几行调用 Windows' GetCommandLineW
和 CommandLineToArgvW
的标准 main
,然后调用一个 wmain
函数。
调用 wmain
的标准 main
示例,如上图所示:
#ifdef USE_STD_MAIN
#include <stdlib.h> // EXIT_...
#include <windows.h> // GetCommandLineW, CommandLineToArgvW
#include <memory> // std::(unique_ptr)
auto main()
-> int
{
int n_args;
wchar_t** p_args = CommandLineToArgvW(GetCommandLineW(), &n_args );
if( p_args == nullptr )
{
return EXIT_FAILURE;
}
const auto cleanup = []( wchar_t** p ) { LocalFree( p ); };
try
{
std::unique_ptr<wchar_t*, void(*)(wchar_t**)> u( p_args, cleanup );
return wmain( n_args, p_args );
}
catch( ... )
{
throw;
}
}
#endif
try
-catch
的目的似乎没有做任何事情,是为了保证像 u
这样的局部变量的析构函数调用是为调用 wmain
.
免责声明:我刚刚编写了该代码。它没有经过广泛的测试。