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

标签 c# c++ com pinvoke

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

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/

相关文章:

c++ - 如何在触发 QObject::connect 的代码中查明调用的位置:无法在 Qt5 中对类型的参数进行排队?

Azure COM 对象

c# - 在 Xamarin.iOS 中设置 RootViewController 后 NavigationController 为 null

c# - ANTLR 访问者单元测试在一条规则上成功,但在另一条规则上失败

c# - 在 C# (wpf) 中捕获 Windows 键

c++ - 两种专门方法中的相同代码

c++ - C++ 中的聊天程序返回无限消息

c++ - "Shell Namespace"新建文件夹的方法是什么?

c# - 在没有头文件的情况下声明 COM 接口(interface)指针

C# 属性检查一个日期是否早于另一个日期