你现在可以试试。
定义WinMain和wWinMain abd将其编译为静态库。
为可执行文件exe创建一个新项目。
设置字符集设置UNICODE系统。(定义_UNICODE)
链接刚刚创建的静态库。
然后你的程序从WinMain开始。
当定义WinMain和wWinMain时,无论字符集是多字节还是unicode,都会调用WinMain。
只有在静态库中定义WinMain时才会发生。
在源项目中定义WinMain和wWinMain时,它可以正常工作,
unicode系统调用wWinMain和多字节系统调用WinMain。
为什么会这样?
答案 0 :(得分:0)
链接器尝试推断出您的入口点,并替换__tmainCRTStartup的correspoinding实现。但是这里有两个限制:
所以,为了回答你的问题,为什么你会看到这个,你是否正在遇到“未定义行为”的案例之一。您不应该依赖此行为,因为它不能保证可以工作,并且可能会在新的编译器版本中更改。
我建议你使用_tWinMain定义一个单一的入口点:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
链接器还有/ ENTRY选项,但我不建议您使用它,因为它更危险,您可以通过简单地定义单个入口函数并为/ SUBSYSTEM链接器选项传递正确的值来实现相同的功能。