0

VS2012 で GUI (単純なコンソール アプリケーションではない) を使用して WIN32 アプリケーションを作成しようとしましたが、この 1 つのエラーで立ち往生しています。私のプロジェクトはリリース構成です。私の主な機能は次のようになります。

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) から Not Set へ)

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 に答える