2011-10-24 57 views
1

下面是一个在C的PInvoke块++,我试图将转换为C#:的PInvoke使用指针 - C++到C#

typedef PVOID JHANDLE ; 
typedef UINT32 JRET ; 

#define JEXPORT __declspec(dllimport) JRET 

JEXPORT 
JInitialize (
    OUT JHANDLE* ppHandle, 
    IN PVOID  context, 
    IN UINT32  flags 
) ; 

我尝试了以下调用,但它扔了PInvokeStackImbalance例外说,签名不匹配:

[DllImport("jhi.dll")] 
public static extern UInt32 JHI_Initialize(out IntPtr ppHandle, IntPtr context, UInt32 flags); 

很明显,指针的指针处理方式不同,但我不完全确定它是如何转换的。

回答

2

您在[DllImport]声明中错过了CallingConvention,它是Cdecl。

+0

谢谢,我总是忘记CallingConvention – Daniel

+0

我知道这是古老的,OP的问题并不真的符合我的要求,但是这个答案在几个小时的pInvoke地狱后才救了我。你得到一票。 – Zippit