我刚开始使用 C++,但遇到了无法修复的错误。
这是我到目前为止的所有代码(甚至无法让 hello world 工作):
#include "stdafx.h"
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, L"Hello World!",
L"Hello World!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
但是当我尝试运行它时出现了这个错误:
Test.cpp(11): error C2373: 'WinMain' : redefinition; different type modifiers C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winbase.h(2588) : see declaration of 'WinMain'
当我查看 WinMain 的声明时,我看到在每个参数之前都有一个“__in”。我尝试添加它,但没有运气。我也尝试用 CALLBACK 替换 WINAPI,但这也没有用。
最佳答案
简单的解决方法是
使用标准的 main
函数。
像这样:
#undef UNICODE
#define UNICODE
#incude <windows.h>
int main()
{
MessageBox(
0,
L"Hello World!",
L"Hello World!",
MB_ICONEXCLAMATION | MB_SETFOREGROUND
);
}
现在您唯一的问题是使用 Microsoft 的工具集将其构建为 GUI 子系统应用程序,这在这方面有点落后(GNU 工具链没有这样的问题)。
为此,通过 Microsoft 的链接
,使用此链接器选项(除了选择 GUI 子系统之外):/entry:mainCRTStartup
。
请注意,您可以将该选项放入名为 LINK
的环境变量中。
编码愉快! :-)
关于c++ - WinMain 重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428429/