首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinMain重定义

WinMain重定义
EN

Stack Overflow用户
提问于 2013-01-20 19:35:15
回答 2查看 2.5K关注 0票数 3

我刚开始学习C++,我遇到了一个我无法修复的错误。

到目前为止,以下是我所有的代码(甚至连hello world都无法工作):

代码语言:javascript
复制
#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):错误C2373:'WinMain‘:重新定义;不同类型的修饰符C:\Program (x86)\Microsoft \Windows\v7.0A\include\winbase.h(2588):参见'WinMain’的声明。

当我查看WinMain的声明时,我看到在每个参数之前都有一个"__in“。我试着加了那个,但没有运气。我也尝试用回调替换WINAPI,但这也不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-20 19:46:47

简单的解决办法是

main 使用标准的函数

如下所示:

代码语言:javascript
复制
#undef UNICODE
#define UNICODE
#incude <windows.h>

int main()
{
    MessageBox(
        0,
        L"Hello World!",
        L"Hello World!",
        MB_ICONEXCLAMATION | MB_SETFOREGROUND
        );
}

现在,您唯一的问题是使用Microsoft的工具集将其构建为GUI子系统应用程序,这在这方面比延迟更多( GNU工具链没有这样的问题)。

为此,在微软的link中,使用这个链接器选项(除了选择GUI子系统):/entry:mainCRTStartup

请注意,您可以将该选项放入名为LINK的环境变量中。

快乐编码!:-)

票数 4
EN

Stack Overflow用户

发布于 2013-01-20 20:28:34

WinMain是一个C函数,因此您需要用extern "C"包装它

代码语言:javascript
复制
#include "stdafx.h"
#include <windows.h>

extern "C"
{

    int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
               LPSTR lpCmdLine, int nCmdShow)
    {
                   MessageBox(NULL, L"Hello World!",
                       L"Hello World!",
                       MB_ICONEXCLAMATION | MB_OK);
                   return 0;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14428429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档