3

標準のC++で記述されたライブラリがあります。また、アンマネージライブラリを利用するC#で記述された.NetWindowsフォームアプリもあります。

pinvokeを使用できることは理解していますが、C ++は完全にOOであり、マーシャリングなどをいじりたくありません。

新しいマネージC++dllプロジェクトを作成し、ヘッダーファイルとコードファイルをコピーして貼り付け、コンパイルしてすべてのクラスにアクセスできるようにする方法はありますか?

または、マネージC ++でrefクラスを作成し、それをアンマネージクラスに接続する必要がありますか?これをできるだけシンプルにしたいと思います。

ありがとう!

4

2 に答える 2

3

C ++ / CLIでも、特定の.NETラッパーを作成する必要があります。見た目が異なるだけです。したがって、答えは、C ++ / CLIプロジェクトに入れて、再コンパイルしてそのまま使用できるかということです。それでも、データをマーシャリングする必要があります(この場合、おそらくp / Invokeを使用することもできます)。または、ハンドルを作成し、固定メモリを使用して、構造をマネージコードで使用できるようにすることができます。

私はこれを両方の方法で行いました:CUDA CでGPUライブラリを作成し、p / Invokeを使用してF#から呼び出し、C ++でビデオ処理ライブラリを作成し、シンC ++/CLIラッパーを作成してから使用しました.NETアプリ。CLIラッパーの方が苦痛だったと思いますが、ライブビデオの場合、必要なレイテンシは少なくなりました(メモリのコピーが少なくなりました)。GPUプロジェクトでは、スループットにもっと関心がありました。

于 2012-05-18T23:18:03.993 に答える
0

おそらく、C ++/CLIでラッパークラスを記述したいと思うでしょう。ポインタの代わりにハンドルを返し、コレクションの代わりに列挙子などを返す限り、これを行うのはかなり簡単です。

于 2012-05-18T22:02:56.870 に答える