以下是我试图转换为C#的C++中的PInvoke块:

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);

显然,一个指针的指针处理方式不同,但是我不确定它是如何转换的。

最佳答案

您在[DllImport]声明中缺少CallingConvention,它是Cdecl。

关于c# - 用指针PInvoke-C++到C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7880312/

10-11 19:12