私は、外部アプリケーションで使用する必要のあるメソッドを含むC#クラスライブラリを持っています。残念ながら、この外部アプリケーションはC/C++の外部APIしかサポートしていません。配列をC++からC#に移動して変更し、それをC++に戻す最も簡単な方法
今私はC++ DLLとC#DLLの間で動作する非常に単純なCOMの例を得ることができましたが、配列データをどのように動かすことができるかについては固執しています。
DLL_EXPORT(void) runAddTest(int add1,long *result) {
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
IUnitModelPtr pIUnit(__uuidof(UnitModel));
long lResult = 0;
// Call the Add method.
pIUnit->Add(5, 10, &lResult);
*result = lResult;
// Uninitialize COM.
CoUninitialize();
}
これは私のC#クラスのAddメソッドを呼び出すために正常に動作します:
これは、私はちょうど私がCOMを介して通信のウェブ上で発見少し例として、これまで持っているものです。これを変更して複数の倍数を取得して返すにはどうすればよいですか? (また、行の下の文字列でそれを行う必要があります)。
私はアンマネージド配列を取って、この配列をいくつかの計算のためにC#クラスに渡し、元の関数呼び出し(アンマネージド)C++で指定された配列参照に結果を戻します。
私はこのような機能を公開する必要があります:
* calcin - doubleの配列への参照
* calcOut - の価値 - ダブルスの
numINの配列への参照入力配列のサイズ
DLL_EXPORT(void) doCalc(double *calcIn, int numIn, double *calcOut)
{
//pass the calcIn array to C# class for the calcuations
//get the values back from my C# class
//put the values from the C# class
//into the array ref specified by the *calcOut reference
}
I 私は外部アプリケーション用にC++ \ CLI DLLを使用できます。これがまっすぐなCOMよりも簡単な場合、私はそれを見て喜んでいます。
私は主にC#開発者ですが、InteropとC++の深いところに投げ込まれました。