Visual C++ 6.0移除默认库后如何指定自定义入口点?
在VC6.0中移除默认库后配置自定义入口点的方案
问题场景
维护基于Windows API开发的C语言遗留程序,开发环境为Visual C++ 6.0。由于移除了所有默认库,无法通过常规方式使用WinMain()作为程序入口,且找不到VC6中设置自定义入口点的选项,编译时出现链接错误。
报错信息
LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup Release/calcy.exe : fatal error LNK1120: 1 unresolved externals
现有代码示例
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBoxA(NULL,"Hello World!","info",0); return 0; }
解决步骤
1. 设置自定义入口点
- 右键点击项目,选择「Settings」(设置)
- 切换到「Link」(链接)标签页
- 在「Category」(类别)下拉菜单中选择「Input」(输入)
- 在「Entry-point symbol」(入口点符号)输入框中填写
_WinMain@16(注:这是WinMain()经过stdcall调用约定修饰后的符号名)
2. 链接必要的Windows库
由于移除了默认库,需要手动链接user32.lib以确保MessageBoxA()能正常调用,有两种方式:
- 在链接器设置中添加:同样在「Link」标签页的「Input」类别下,在「Object/library modules」(对象/库模块)末尾添加
user32.lib - 或者在代码开头添加编译指令:
#pragma comment(lib, "user32.lib")
补充说明
_WinMainCRTStartup是CRT(C运行时库)提供的启动入口函数,它负责初始化CRT环境后再调用WinMain()。移除默认库后CRT启动代码缺失,因此需要直接将程序入口指定为你实现的WinMain()(即其修饰后的符号名_WinMain@16)。
内容的提问来源于stack exchange,提问作者securityauditor
相关产品推荐
相关产品推荐

