我正在尝试从C#项目访问非Daged Solver dll(http://privat.bahnhof.se/wb758135/bridge/dll.html)非托管C ++代码,但是我收到以下错误消息:
“System.AccessViolationException”类型的未处理异常 发生在Dds.Net.dll
附加信息:尝试读取或写入受保护的内存。 这通常表明其他内存已损坏。
错误似乎是在调用方法 Par取三个参数
struct ddTableResults * tablep,struct parResults * presp,int vulnerability
具体而言,与传递第二个参数有关,该参数被描述为:
struct parResults char parScore [2] [16]; char parContractsString [2] [128];
这是我的代码: 我的c#struct:
using System.Runtime.InteropServices;
namespace Dds.Net.Integration
{
[StructLayout(LayoutKind.Sequential)]
internal struct ParResults
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst =32)]
public char[,] parScore;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[,] parContractString;
}
}
dllimport调用函数:
[DllImport("dds.dll")]
public static extern int Par(DdTableResults tablep, int vulnerable, ParResults parResults);
知道我能做些什么才能让它发挥作用?
非常感谢!
答案 0 :(得分:0)
据我了解,你的c ++签名是
int Par(struct ddTableResults *tablep, struct parResults *presp, int vulnerable)
c#one可能是
[DllImport("dds.dll")]
public static extern int Par(ref DdTableResults tablep, ref ParResults parResults, int vulnerable);
c ++需要DdTableResults
和ParResults
的poitner,没有ref
c#将按值传递结构。