我試圖從託管調用方調用C++/CLI類方法。託管程序集定義了一個類,它是C++/CLI函數的輸入類型,並通過OnPropertyChanged事件響應託管類中變量的更改。當其中一個事件更改處理程序觸發它調用傳遞數據的C++/CLI。由託管程序集調用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
以便在聲明中抽象類型?
謝謝。
你將不得不自下而上。在你的C++/CLI代碼中聲明一個'interface class',它聲明瞭你的C#代碼可以實現的接口。 DoSomething()如何返回對接口的*具體*實例的引用是你必須考慮的事情。這不能真正起作用。 –