前回の質問で、C++-cli プログラムで C# フォームを実行することについて尋ねました。動作するようになりましたが、問題が発生しています。私は簡潔にしようとします。
私の C++ プログラムは、C# フォームを実行し、その中でいくつかの単純な関数を実行する必要があります (カウンターを増やして表示する)。ただし、これを行う最善の方法はわかりません。init 関数で初期化されたフォームがあります。
C++-cli
SUTAdapter::Form1^ *ptForm1; // Global variable
...
FormProject::Form1^ form1;
form1 = gcnew FormProject::Form1();
ptForm1 = &form1;
(*ptForm1)->Show();
(*ptForm1)->incCounter(0);
C++ プログラムの他の一部の関数は、単に incCounter を呼び出します。私の問題は、別の関数から incCounter への 2 回目の呼び出しで C# Form1 が null (this == null) になるため、incCounter の関数コードを使用できますが、クラス変数は使用できません。プログラムが FormProject を破棄したかのように、奇妙です。
C#
public void incCounter(int counter)
{
int param1 = counter;
this.count[counter]++; // this == null in sucessive calls from c++ program
}
私は何を間違っていますか?問題がUIにある場合に備えて、実際にフォームを無効にし、関数と変数を使用しています(呼び出しなど)。Form1 をクリアする C++ init 関数 (コードの最初のチャンク) を終了していますか?