c++ - WinMain 重新定义

标签 c++ winapi

我刚开始使用 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/

相关文章:

c++ - 基于 Chromium Edge 的 WebView2 不起作用

c++ - 在 Lua 中调用 tolua++ 中可能未公开的函数

windows - 有MAKELONGLONG函数吗?

c++ - 使用 WinAPI 找出锁定文件的内容

c++ - windres fatal error : when writing output to : Invalid argument

c++ - 需要帮助理解 Java 人员的 C++ Windows

c++ - 将 uint16_t 解释为 int16_t

c++ - 为什么这个程序不能从 .bin 文件中正确读取(或写入?)? (C++)

c++ - 随机遍历 map 会导致段错误

c++ - 如何在C++中获取线程的结果