AccessViolation во время PInvoke - PullRequest
       11

AccessViolation во время PInvoke

0 голосов
/ 06 февраля 2012

У меня есть этот вызов DLL:

 [DllImport("FreqCntPcIntf.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern Intf_ErrorType FreqCntIntf_Init(
        ref byte InstNo, 
        string InstName, 
        string PortServerName, 
        ulong UartComPort, 
        ulong MaxBlockTime);

enum Intf_ErrorType
{
    ...
}

И объявление C ++ это:

FREQCNTINTF_API Intf_ErrorType STDCALL FreqCntIntf_Init(InstanceNoType* InstNo, const char* InstName, const char* PortServerName, rsuint32 UartComPort, rsuint32 MaxBlockTime); 

где:

typedef enum 
{
   ....
}  RSENUM8(Intf_ErrorType);

#define FREQCNTINTF_API __declspec(dllexport)
typedef rsuint8 InstanceNoType;
typedef unsigned char rsuint8;
#define RSENUM32(EnumName)  Enum_##EnumName; typedef rsuint32 EnumName

Я получаю AccessViolation во время вызова,Куда мне обратиться, чтобы найти ошибку?

1 Ответ

1 голос
/ 06 февраля 2012

rsuint32 должен быть выражен как uint, который имеет ширину 4 байта, а не ulong, который в C # имеет длину 8 байтов.Кроме того, вы можете убедиться, что ваши строки являются маршаллированными, добавив CharSet, например:

[DllImport("FreqCntPcIntf.dll", CallingConvention = CallingConvention.StdCall, CharSet=CharSet.Ansi)]
...