3

私は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):エラーC2373:'WinMain':再定義; さまざまな型修飾子C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ include \ winbase.h(2588):「WinMain」の宣言を参照

WinMainの宣言を見ると、各パラメーターの前に「__in」があることがわかります。それを追加してみましたが、うまくいきませんでした。また、WINAPIをCALLBACKに置き換えてみましたが、それも機能しませんでした。

4

2 に答える 2

4

簡単な解決策は

    標準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のlink場合、(GUIサブシステムの選択に加えて)このリンカーオプションを使用します/entry:mainCRTStartup

そのオプションは、と呼ばれる環境変数に入れることができることに注意してくださいLINK

ハッピーコーディング!:-)

于 2013-01-20T19:46:47.583 に答える
1

WinMain は C 関数であるため、次のようにラップする必要があります。extern "C"

#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;
    }
}
于 2013-01-20T20:28:34.557 に答える