我一直试图找到任何信息,但谷歌完全让我失望了。以下代码无法编译为标准 unicode,并且我在 MessageBoxW 中得到了损坏的东西(它是 MessageBoxW,我已经在 ollydbg 中反汇编并测试了 exe),但是我的用户名“юзер”从路径到 exe 正确显示在消息中(如预期的那样)。问题是 C 编译器,由于某种原因无法正确编译我的字符串。我尝试了 L 和 TEXT() ,结果相同。
这是输入的唯一源文件,编码为 UTF-8,没有 BOM(notepad++)。
#define _UNICODE
#define UNICODE
#include <windows.h>
void main() {
wchar_t exe[254];
GetModuleFileName(NULL,(wchar_t *)&exe,254);
MessageBox(NULL,(wchar_t *)&exe,L"юзер",0);
ExitProcess(0);
}
构建命令(我尝试在 Visual Studio 2003 和 Visual C++ 6 中构建,但很久以前就放弃了,转而在 cmd.exe 中手动编译以获得原始结果):
cl.exe /c /nologo test-unicode-ui.c link.exe /nologo /nodefaultlib /entry:main kernel32.lib user32.lib /OUT:test-unicode-ui.exe test-unicode-ui.obj
这绝对没有用,我尝试的每种方法都会从源代码中给我损坏的静态字符串,但内部处理没关系(比如,你从 winapi 获得的东西是可信的并且工作正常)。当然,我可以在运行时手动编写几个字符串,幸运的是我没有很多,但这听起来不奇怪吗?
我在这里缺少什么明显的东西?