我一直在尝试用VS2012上的GUI(不是一个简单的控制台应用程序)制作一个WIN32应用程序,而且我遇到了这个错误。我的项目是发布配置。我的主要功能如下:
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
}
我尝试了什么:
1)使用以下设置创建新的WIN32项目:
2)在Unicode和多字节字符集之间切换
3)更改子系统(从Windows(/ SUBSYSTEM:WINDOWS)更改为未设置)
4)添加入口点(main; _main; WinMain)
5)添加#undef _ATL_MIN_CRT(我很确定它无论如何都被禁用了,但仍然是为了额外的保险......)
这些都没有解决我的问题。我搜索了互联网,但没有发现任何有类似问题的人(创建WIN32应用程序)已经解决了他们的问题。
编辑:我也在使用Allegro 5库,我正在使用/ MT构建程序。
欢迎任何建议。
答案 0 :(得分:1)
问题是您对main
函数使用了错误的调用约定。正如Name Decoration的文档所解释的那样,带有前导下划线且没有其他装饰的符号表示 C调用约定。
main
功能的签名应为:
extern "C" __cdecl void main();
请注意,返回值和参数列表都不是名称修饰的一部分,因为调用者负责清理。这意味着任何函数签名都可用于满足链接器。
答案 1 :(得分:0)
经过一番搜索,我找到了答案。
我需要做的就是定义ALLEGRO_NO_MAGIC_MAIN。