Я пытаюсь получить доступ к DLL Double пустышки Solver (http://privat.bahnhof.se/wb758135/bridge/dll.html) неуправляемого C++ кода из C# проекта, но я получаю следующее сообщение об ошибке:AccessViolationException при обращении к неуправляемого C++ DLL с C#
необработанное исключение типа «System.AccessViolationException» произошел в Dds.Net.dll
Дополнительная информация: Попытка чтения или записи защищенной памяти. Это часто свидетельствует о том, что другая память повреждена.
ошибка, кажется, вокруг вызова метода Пар, который принимает три аргумента
Struct ddTableResults * tablep, структуры parResults * presp, внутр уязвима
В частности, связанные с проходящей во втором параметре, который описан как:
struct par Результаты 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# подпись не совпадает с сигнатурой C++, которую вы нам предоставили: 'public static extern int Par (DdTableResults tablep, int уязвимый, ParResults parResults);' vs 'struct ddTableResults * tablep, struct parResults * presp, int уязвимый' (2-й и 3-й парамы заменены) –
Спасибо за ответ. Сейчас я переключил параметры, но по-прежнему вызывает исключение SystemViolation. –