【问题标题】:PInvoke with pointers - C++ to C#PInvoke 与指针 - C++ 到 C#
【发布时间】:2011-10-24 18:46:54
【问题描述】:

以下是我尝试将其转换为 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);

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

【问题讨论】:

    标签: c# c++ com pinvoke


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我总是忘记 CallingConvention
    • 我知道这很古老,而且 OP 的问题与我的问题并不完全匹配,但这个答案在我经历了数小时的 pInvoke 地狱之后才救了我。你得到一票。
    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多