带指针的PInvoke - c++到c#

本文关键字:c++ PInvoke 指针 | 更新日期: 2023-09-27 18:12:09

下面是我试图转换为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
) ;

我尝试了下面的调用,但它抛出了一个pinvokestack失衡异常,说签名不匹配:

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

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

带指针的PInvoke - c++到c#

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