何時間もこれに取り組んできましたが、うまくいきませんでした:(
以下のコードは、「保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。」という例外が発生します。 これは修正されました。以下の更新を参照してください
しかし、戻り値の型をintに変更してint値を返すと、機能します。float値を返すようにする方法は? ありがとう。
vs2012
C++ コード
extern "C" __declspec(dllexport)
float compute_similarity()
{
return 1.01;
}
c# コード
[DllImport("demo.exe", EntryPoint = "compute_similarity", CallingConvention = CallingConvention.Cdecl)]
public static extern float compute_similarity();
public void Get()
{
float x = compute_similarity(); // here returns random value
}
=====================================
アップデート
以下の David からのコメントを参照してください。問題は、c# プロジェクトが x64 をターゲットにしており、c++ プロジェクトが Win32 をターゲットにしていることです。c# プロジェクトを x86 を対象とするように変更した後、例外はなくなりました。
ただし、C# からの呼び出しは、期待される 1.01 ではなく、ランダムな値を返します。