0

我一直在尝试在 VS2012 上使用 GUI(不是简单的控制台应用程序)制作 WIN32 应用程序,但我遇到了这个错误。我的项目是发布配置。我的主要功能如下所示:

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{

    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
}

我试过的:

1) 使用以下设置创建一个新的 WIN32 项目:

  • 应用程序类型 -> Windows 应用程序
  • 附加选项 -> 空项目(没有 SDL!)
  • 没有检查其他选项

2) 在 Unicode 和多字节字符集之间切换

3) 更改子系统(从 Windows (/SUBSYSTEM:WINDOWS) 更改为未设置)

4) 添加入口点 (main ; _main ; WinMain)

5)添加#undef _ATL_MIN_CRT(我很确定它无论如何都被禁用了,但仍然这样做是为了额外的保险......)

这些都没有解决我的问题。我在互联网上搜索过,没有找到任何有类似问题(创建 WIN32 应用程序)的人解决了他们的问题。

编辑:我也在使用 Allegro 5 库,并且正在使用 /MT 构建程序。

欢迎任何建议。

4

2 回答 2

1

问题是您为main函数使用了错误的调用约定。正如名称装饰的文档所解释的,带有前导下划线且没有其他装饰的符号表示C 调用约定

您的函数的签名main应该是:

extern "C" __cdecl void main();

请注意,返回值和参数列表都不是名称修饰的一部分,因为调用者负责清理。这意味着可以使用任何函数签名来满足链接器的要求。

于 2013-11-05T16:29:50.333 回答
0

经过一番搜索,我找到了答案。

我需要做的就是定义 ALLEGRO_NO_MAGIC_MAIN 。

于 2013-11-05T19:07:34.380 回答