2012-02-06 13 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

ULONGは8バイト幅ではなく、4バイト –

答えて

1

rsuint32は、uintと表されます。これは、C#で8バイト長のulongではなく、4バイト幅です。また、あなたはあなたの文字列が、このように、文字セットを指定することにより、propleryを整列化していることを、確認するかもしれません:C#で

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

おかげで、私のせいで、私は長い間混乱し、 int。私に恥ずかしい:)しかし、とにかくそれは助けにはなりません - 私のコードはAccessViolationExceptionをスローしています。私もすべての文字セットを試しました - 何も助けません – Archeg

+0

問題が見つかりました。あなたが指摘したことと一緒に、文字列の1つをnullとして渡しました。それらがnullであってはならないと思われる。ありがとう – Archeg

関連する問題