一時ファイルをいじりたくない場合は、C ++/CLIを使用することをお勧めします。
VisualStudioでC++/CLIdllプロジェクトを作成します。静的管理クラスを1つ作成し、C#から使用する関数を定義します。
public ref class JpegTools
{
public:
static array<byte>^ Optimize(array<byte>^ input)
};
定義するこれらの関数は、C#から直接呼び出すことができ、C++が提供するすべてのものを使用して実装できます。
array ^はC#バイト配列に対応します。pin_ptr <>を使用してバイト配列をメモリに固定する必要があります。これにより、選択したアンマネージJpegヘルパー関数にデータを渡すことができます。C ++ / CLIは、マネージ型をネイティブ型にマーシャリングするための十分なサポートを備えています。gc_newを使用して新しい配列を割り当て、CLI互換タイプを返すこともできます。この演習の一環として文字列をC#からC ++にマーシャリングする必要がある場合は、Mfc/AtlのCString型を使用してください。
すべてのjpegコードをdllに静的にリンクできます。C ++ dllは、純粋なネイティブコードとC ++/CLIコードを混在させることができます。私たちのC++/ CLIプロジェクトでは、通常、インターフェイスソースファイルのみがCLIタイプを認識し、残りはすべてC++タイプで機能します。
この方法を実行するにはいくつかのオーバーヘッド作業がありますが、利点は、コードがコンパイル時に型チェックされ、管理されていないコードとメモリの処理がすべてC++側で処理されることです。実際には非常にうまく機能するので、C ++/CLIを使用してネイティブC++コードをNUnitでほぼ直接単体テストしました。
幸運を!