如何编写可以在不打开窗口或控制台的情况下运行的C/C++应用程序?
编写WinMain程序时,会自动将/ SUBSYSTEM选项作为编译器中的窗口.(假设您使用Visual Studio).对于任何其他编译器,可能存在类似的选项,但标志名称可能不同.
这会导致编译器以可执行文件格式(PE格式)创建一个条目,将可执行文件标记为Windows可执行文件.
一旦此信息出现在可执行文件中,启动程序的系统加载程序会将您的二进制文件视为Windows可执行文件而不是控制台程序,因此它不会导致控制台窗口在运行时自动打开.
但是Windows程序如果不需要就不需要创建任何窗口,就像你在任务栏中看到的那些程序和服务一样,但是没有看到任何相应的窗口.如果您创建一个窗口但是选择不显示它,也会发生这种情况.
所有你需要做的就是实现这一切,
#includeint WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int cmdShow) { /* do your stuff here. If you return from this function the program ends */ }
您需要WinMain本身的原因是,一旦您将子系统标记为Windows,链接器就会假定您的入口点函数(在程序加载和C Run TIme库初始化后调用)将是WinMain而不是main.如果您未在此类程序中提供WinMain,则在链接过程中将出现未解决的符号错误.
在Windows中:
#includeint APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // <-- Program logic here return 0; }
请务必使用Adam Mitz提到的/ SUBSYSTEM链接器开关.
在其他平台上:
int main(int argc, char**argv) { // <-- Program logic here return 0; }