PInvoke 与指针 - C++ 到 C#
Posted
技术标签:
【中文标题】PInvoke 与指针 - C++ 到 C#【英文标题】:PInvoke with pointers - C++ to 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);
显然指针的指针处理方式不同,但我不确定它是如何翻译的。
【问题讨论】:
【参考方案1】:您的 [DllImport] 声明中缺少 CallingConvention,它是 Cdecl。
【讨论】:
谢谢,我总是忘记 CallingConvention 我知道这很古老,而且 OP 的问题与我的问题并不完全匹配,但这个答案在我经历了数小时的 pInvoke 地狱之后才救了我。你得到一票。以上是关于PInvoke 与指针 - C++ 到 C#的主要内容,如果未能解决你的问题,请参考以下文章
将带有结构字段的结构从 c++ 返回到 c# pinvoke