0

多くのメソッドを備えたレガシーC++プログラム(標準のC ++は管理されていません)があります。ほとんどの場合、charとintのパラメーターを使用します。ただし、次のメソッドシグネチャがあります。

Convert(CDataSet &DataSet, CValue &Var, char *pOutput, int &nParser)

そのメソッドをC#から呼び出す必要があります。charとintを必要とするアンマネージメソッドを問題なく呼び出すことができる既存のマネージC++クラスがあります。ただし、データセットを渡す必要がある場合に、C#からC++メソッドを呼び出す方法については説明がありません。そうすることは不可能だと言う人もいます。本当?

データセットを渡すことができない場合、オブジェクトを渡し、マネージドクラスがそれをデータセットとしてキャストしてアンマネージドクラスに渡すことは可能ですか?

4

1 に答える 1

1

マネージC++ラッパーlibで、たとえばSystem.Data.DataSetを受け入れ、そのデータをCDataSetに変換して、アンマネージコードを呼び出します。戻ったら、更新を元に戻します(必要な場合)。

UPD:「変換」とは、ラッパーメソッド内にCDataSetクラスの新しいインスタンスを作成し、マネージドオブジェクトからデータを入力してから、アンマネージド関数を呼び出すことを意味します。必要に応じて転送データを元の管理対象に戻し、返却する場合。

呼び出し間またはプロセス境界を越えてオブジェクトの更新を管理する必要がある場合(つまり、他の関数呼び出しでは、オブジェクトが渡されない場合でもこのオブジェクトが更新されます)、管理されていないオブジェクトのラッパーを作成し、操作できる管理されたインターフェイスを提供します必要なレベルのオブジェクト。

于 2012-09-08T01:39:02.430 に答える