2015-11-21 5 views
1

Я пытаюсь получить доступ к 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); 

Любая идея, что я могу сделать, чтобы получить эту работу?

Большое спасибо!

+0

C# подпись не совпадает с сигнатурой C++, которую вы нам предоставили: 'public static extern int Par (DdTableResults tablep, int уязвимый, ParResults parResults);' vs 'struct ddTableResults * tablep, struct parResults * presp, int уязвимый' (2-й и 3-й парамы заменены) –

+0

Спасибо за ответ. Сейчас я переключил параметры, но по-прежнему вызывает исключение SystemViolation. –

ответ

0

, насколько я понимаю, вы 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++ хочет poitner к DdTableResults и ParResults без ref C# будет проходить структуры по значению ,

+0

Большое спасибо, это решило нарушение доступа, которое позволило мне довольно быстро отладить остальную часть моей программы и запустить все! –

Смежные вопросы