信頼できるANSI標準Cコードがいくつかあります。つまり、ソースを持っていても、別の言語に翻訳したり、呼び出し引数を変更したりすることはできません。これらのアクションは権限を無効にするためです。150以上の機能があります。
ファイル名を .C から .CPP に変更して、Visual Studio 2009 の C++ コンパイラを使用してコンパイルできるようにするなど、付随的な変更を加えることができます。コンパイラ指令などを追加することもできます。必要に応じて、ラッパー レイヤーを通過することもできます。
もう 1 つの制限は、 C# コードでunsafeキーワードを使用することを会社が望んでいないことです。
これらの関数を C# プログラムから取得する必要があります。
典型的な C/C++ 関数は次のようになります。
double SomeFunction(double a, double[3] vec, double[3][3] mat);
配列の内容が入力される場合と出力される場合があり、両方である場合はほとんどありません。
最初にアンマネージ DLL を作成してみました (Extern C とマークされた関数を使用)。単純な引数 (int、double) のみを持つ関数は正常に機能しましたが、配列をマーシャリングする方法を特定できませんでした。(実際、いくつかのサンプル コードを見つけましたが、150 回複製するのは非常に複雑で無理でした。)
次に、同じソリューション内で 2 つのプロジェクトを試しました。1 つは C++ で、もう 1 つは C# です。C++ プロジェクトで、アンマネージとしてマークされた元の関数を呼び出すマネージ関数を作成しました。これは非常にクリーンで単純であり、単純な引数も問題なく機能しました。しかし、配列の場合、C# と C++ の境界を越えて引数の型を一致させる方法を見つけることができませんでした
Argument '2': cannot convert from 'double[]' to 'double*'
(また、前述のように、unsafe を使用してポインターを取得することはできません)。
確かに、私がやろうとしていることは可能でなければなりません。
これらの機能を取得するための最良の方法は何ですか?
(上記の関数を使用したサンプル コードは非常に優れています。)