gpt4 book ai didi

.net - 为什么在这个简单的示例中得到 “PInvokeStackImbalance was detected”?

转载 作者:行者123 更新时间:2023-12-03 11:35:23 25 4
gpt4 key购买 nike

我正在创建一个非常简单的PInvoke示例:

extern "C" __declspec(dllexport) int Add(int a, int b)
{
return a + b;
}

[DllImport("CommonNativeLib.dll")]
extern public static int Add(int a, int b);

return NativeMethods.Add(a, b);

但是,每当我调用上面的 NativeMethods.Add方法时,我都会得到以下托管调试助手:

PInvokeStackImbalance was detected Message: A call to PInvoke function 'CommonManagedLib!CommonManagedLib.NativeMethods::Add' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.



然后,调用以预期的返回值完成,但是出现MDA消息既烦人又令人担忧-我还不完全了解PInvoke,但是从我阅读的内容中我很确定我的签名是正确的-什么我做错了吗?

全部都在32位OS上。

最佳答案

您需要改为使用

[DllImport("CommonNativeLib.dll", CallingConvention = CallingConvention.Cdecl)]


extern "C" __declspec(dllexport) int __stdcall Add(int a, int b) ...

因为常规C函数的工作方式不同于Windows API函数;它们的“调用约定”不同,这意味着它们如何传递参数是不同的。 (在错误中暗示了这一点。)

关于.net - 为什么在这个简单的示例中得到 “PInvokeStackImbalance was detected”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com