2012-02-06 3 views
0

동안 AccessViolation :나는이 DLL 호출이 PInvoke를

[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++ 선언은 이것이다 :

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가 나타납니다

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

. 버그를 찾으려면 어디를 봐야합니까?

+0

C#에서 ULONG이없는 4 바이트 –

답변

1

rsuint32uint으로 표시되어야하며, C#은 8 바이트 길이 인 ulong이 아니라 4 바이트 길이 여야합니다.

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

감사를, 8 바이트 폭이다, 내 잘못, 나는 긴 혼란 : 또한,이 같은 캐릭터 세트를 지정하여, 물론, 당신의 문자열이 정렬 화되는 것을 proplery을 할 수 있습니다 int. 부끄러운 줄 알아 :)하지만 어쨌든 도움이 안돼 - 내 코드는 AccessViolationException을 던지고있다. 나는 또한 모든 문자셋을 시도했다. 아무런 도움이되지 않았다. – Archeg

+0

문제를 발견했다. 네가 지적한 것과 함께 나는 문자열 중 하나를 null로 전달했다. null이 아니어야합니다. 감사 – Archeg

관련 문제