管理対象呼び出し元から C++/CLI クラス メソッドを呼び出そうとしています。マネージド アセンブリは、C++/CLI 関数への入力型であるクラスを定義し、OnPropertyChanged イベントを介してマネージド クラスの変数への変更に応答します。イベント変更ハンドラーの 1 つが起動すると、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
ありがとう。