この件に関する多くの記事を見てきましたが、問題の解決に役立つ記事はありませんでした。本質的には、C# から参照によって変数を渡し、CLI ラッパーを介して C++ ライブラリに渡し、変数を変更し、戻り値を使用せずに関数を介して戻すことができるようにしたいと考えています。
私が現在持っているコードは次のとおりです。
C# の場合:
[DllImport("UtilitiesWrapper.dll", EntryPoint = "Increment", CallingConvention = CallingConvention.Cdecl)]
public static extern void _Increment(int number);
int value;
_Increment( value);
CLI ラッパーで:
extern "C" {
__declspec( dllexport) void __cdecl Increment( int& number);
};
void __cdecl Increment( int& number) {
NS_UtilitiesLib::Increment( number);
}
C++ の場合:
namespace NS_UtilitiesLib {
static void Increment( int& number) {
++number;
}
}
CLI関数の最後にメモリが破損しているというエラーが表示され続けますが、これは、C#変数をパラメーターに入れる方法を理解できないためだと思われます(CLIをステップ実行すると、元の変数が取得されないため)価値)。DllImport を使用して C# で関数を宣言するときに [MarshalAs(UnmanagedType.I4)] を使用しようとしましたが、それでも機能しません。
これを機能させる方法を知っている人はいますか?