我正在尝试从托管调用者调用 C++/CLI 类方法。托管程序集定义了一个类,该类是 C++/CLI 函数的输入类型,并通过 OnPropertyChanged 事件响应托管类中变量的更改。当其中一个事件更改处理程序触发时,它调用 C++/CLI 传递数据。
C#:
namespace managedA
{
class clsA
{
//The rest of clsA defined elsewhere
partial void initialise()
{
this.PropertyChanged += delegate(object o, System.ComponentModel.PropertyChangedEventArgs args)
{
if (args.PropertyName == "myvar")
{
CalcMyVar();
}
}
}
void CalcMyVar()
{
cppcli::Calc _calc = new cppcli::Calc();
_calc.DoSomething(this);
}
}
}
C++/CLI:
namespace cppcli
{
public ref class Calc
{
public:
managed::clsA ^ DoSomething(managed::clsA ^ input)
{
...
}
}
}
我遇到的问题是由托管调用者通过 C++/CLI 对自身的循环依赖引起的。我尝试在被调用者(cppcli:Calc)
继承的中间项目中声明一个接口类,但这不起作用,因为中间项目总是需要managed::clsA
在cppcli::Calc
声明时知道。似乎无论我如何声明(例如用cppcli::Calc
抽象),我最终总是需要对声明中某处的引用。如何以在声明中抽象类型的方式声明?managed::clsA
Object
managed::ClsA
cppcli::Calc
谢谢。