2

何時間もこれに取り組んできましたが、うまくいきませんでした:(

以下のコードは、「保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。」という例外が発生します。 これは修正されました。以下の更新を参照してください

しかし、戻り値の型を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 ではなく、ランダムな値を返します。

4

1 に答える 1