在我的最后一个问题中,我询问了有关在 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 的第二次调用使我的 C# Form1 为空(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 上(调用等)。退出 C++ 初始化函数(第一块代码)是否清除 Form1?