我通过Visual配置将我的应用程序(MASM汇编语言程序)入口点设置为:
Linker\System\SubSystem: Windows (/SUBSYSTEM:WINDOWS)
Linker\Advanced\Entry Point: WinMain任何我的主要程序称为WinMain (与上述设置相匹配)。它是一个简单的Windows调用的基本应用程序,例如MessageBoxA.而且起作用了。
现在我正在构建一个窗口应用程序(在程序集中),我在某个地方读到需要调用WinMain Windows作为入口点的地方。
我现在很困惑!使用哪种技术将入口点设置为我的应用程序(exe)?Windows调用'WinMain‘还是Visual链接器入口点设置?C++运行时和OS之间的区别是什么?
发布于 2016-01-22 02:01:24
如果您正在使用C运行时库(在用C进行编程时通常是这样),那么您就不能自己指定链接器入口点。如果这样做,运行库库将无法正确初始化,任何运行时库调用(包括编译器插入的调用)都可能失败。
相反,您的主要功能应该与相关标准相对应: GUI应用程序的WinMain(),控制台应用程序的main()。
在未链接到C运行时库的汇编语言程序中,应指定所选的入口点。
DWORD CALLBACK RawEntryPoint(void);重要:
从原始入口点返回隐式调用ExitThread (请参阅这个答案),这通常不是正确的做法,因为如果Windows创建了任何您不知道的线程,进程将在它们创建之前不会退出。请注意,Windows文档并不总是指示特定API函数何时会导致线程被创建。
相反,您应该显式地调用ExitProcess。这是C运行时库从WinMain()或main()返回时所做的工作。
https://stackoverflow.com/questions/34934999
复制相似问题