簡體   English   中英

使用C#訪問非托管C ++ DLL時出現AccessViolationException

[英]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 ++希望向DdTableResultsParResults ,而無需ref c#將按值傳遞結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM