已经为此工作了几个小时,无法让它工作:(
下面的代码给出了异常“尝试读取或写入受保护的内存。这通常表明其他内存已损坏。” 这是固定的,请参阅下面的更新
但是当我将返回类型更改为int并返回一个int值时,它可以工作。如何让它返回一个浮点值?谢谢。
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