[英]AccessViolationException when accessing unmanaged C++ DLL with C#
我正在嘗試從C#項目訪問不受管理的C ++代碼的Double Dummy Solver dll( http://privat.bahnhof.se/wb758135/bridge/dll.html ),但出現以下錯誤消息:
Dds.Net.dll中發生了'System.AccessViolationException'類型的未處理異常
附加信息:嘗試讀取或寫入受保護的內存。 這通常表明其他內存已損壞。
錯誤似乎與調用帶有三個參數的Par方法有關
struct ddTableResults * tablep,struct parResults * presp,int易受攻擊
具體來說,與傳入第二個參數有關,描述為:
struct parResults char parScore [2] [16]; char parContractsString [2] [128];
這是我的代碼:我的c#結構:
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);
對我可以做些什么有任何想法嗎?
非常感謝!
據我了解,您的c ++簽名是
int Par(struct ddTableResults *tablep, struct parResults *presp, int vulnerable)
C#可能是
[DllImport("dds.dll")]
public static extern int Par(ref DdTableResults tablep, ref ParResults parResults, int vulnerable);
c ++希望向DdTableResults
和ParResults
,而無需ref
c#將按值傳遞結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.