1. ホーム

net framework 4.5 C++でフォーム(WinForm)アプリケーションを書く

2022-03-20 17:37:06

Visual Studio 2013 をインストールし、使い慣れた .net c++ で WinForm アプリケーションを書こうと思ったのですが、プロジェクトを作成する際に Visual C++ - "CLR" オプションで、Windows Forms アプリケーションがないことに気がつきました。そこで、自分で設定しようとしたところ

まず、空の Visual C+ CLR プロジェクトを Test という名前で作成します。

1. 作成後、プロジェクトのプロパティタブ、"一般プロパティ" - "References" - "Add New Reference " - "Assemblies" を開き、System と System を選択します。

このステップの効果は、プログラムが WinForm Forms クラスファミリーを参照できることです。

2. プログラムで最初に表示されるフォームとして、Visual C++->UI->Windows Formsの新しい項目、MainFormと名付けましょうを追加します。

main.cppを追加します(個人的な習慣として、プログラムのエントリーポイントをmain.cppに置くようにしています。)

#include "MainForm.h"
 
int main()
{
System::Windows::Forms::Application::Run(gcnew Test::MainForm());
return 0;
}

4. 生成、実行。MainFormのフォームが表示されるのがわかるはずです。しかし、まだ欠点があります。MSDOSのようなコンソールウィンドウが表示されるのですが、このウィンドウを表示させないようにするにはどうしたらよいでしょうか?

また、プロジェクトのプロパティを設定する必要があります。プロジェクトのプロパティ]タブを開き、[プロパティの設定]をクリックします。

次に、生成して、リンクエラー、"Unresvable external symbol _WinMain@16"を見つけてください。

では、main.cppのint mainをint WinMainに変更します。

#include "MainForm.h"
 
int WinMain()
{
System::Windows::Forms::Application::Run(gcnew Test::MainForm());
return 0;
}

実行します。今度はMSDOSのようなコンソールウィンドウは表示されないはずです。

5. MainForm フォームを閉じ、プログラムを終了します。プログラムが異常終了することがわかります。

"マネージドデバッグアシスタント "FatalExecutionEngineError" ............................(以下略)....。追加情報です。実行中にエラーが発生しました。このエラーのアドレスは0x690d4191で、スレッドは0x5f4です。このエラーは、CLRのバグ、またはユーザーコードの安全でない、または検証できない部分のバグである可能性があります。このバグの一般的な原因は、COM-interopまたはPInvokeブロックの処理におけるユーザーエラーで、スタックを破損させる可能性があります。

まだ何か設定ミスがあるようです

まだプロジェクトのプロパティを設定しています。プロジェクトのプロパティ]タブを開きます。 "プロパティの構成" - "リンカー" - "詳細設定" - "entry point" を "main" に変更します。

次に、WinMainをmainに変更するためにmain.cppのコードを修正します。

#include "MainForm.h"
 
int main()
{
System::Windows::Forms::Application::Run(gcnew Test::MainForm());
return 0;
}





ランを生成して、今度はうまくいくはずです。