2011-10-24 93 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