4

C/C++ コード (ポインター) に C# 参照を渡し、ポインターから C# 参照に戻します。多くのペア(uint、Object)があります。C# よりもはるかに高速であるため、C コードで並べ替えメカニズムを作成しました。必要なのはキー (uint) と値 (オブジェクト参照) だけです。Cコードはソートにキーを使用しており、値(ポインター)を変更していません。それを行う簡単な方法はありますか?マーシャリングを使用する必要がありますか? C関数は何度も(おそらく100万回も)呼び出されるので、マーシャリングが遅すぎるのではないかと心配しており、マーシャリングでそれを行う方法さえ知りません。オブジェクトのアドレスが GC によって変更されても、C# 参照のアドレスは変更されないと思います。そのため、固定されたメモリにオブジェクトを配置する必要はありません。私はこれについて正しいですか?これで、DllImport を使用して C 関数を呼び出すことができます。C ポインタへの C# 参照を格納できます。

これを行う方法についてのアイデアはありますか?

4

2 に答える 2

1

管理された C# コードからネイティブ C++ コードに変数を直接渡すことはできません。解決策は、データをマーシャリングできる pinvoke です。

これは問題なく機能しますが、これが常に高速なソリューションであるとは限らないことを知っておく必要があります. すべての呼び出しで、メモリをコピーする必要があり、データ型によっては変換される場合があります。

于 2012-12-20T18:31:47.997 に答える