gpt4 book ai didi

c# - 在 C# 中调用 C DLL 的问题

转载 作者:行者123 更新时间:2023-11-30 19:49:00 26 4
gpt4 key购买 nike

我目前正在尝试从 C# 调用一个用 C 编写的方法

C 代码如下所示:

extern "C"  int addSum(int a, int b)
{
return a*b;
}

extern "C" int getCount()
{
return 12;
}

C# 代码如下所示:

 [DllImport("mydll.dll", SetLastError=true)]
private static extern int addSum(IntPtr a, IntPtr b);
[DllImport("mydll.dll", SetLastError = true)]
private static extern int getCount();

public static int mySum(int a, int b)
{
return suma(a, b);
}

public static int getMyCount()
{
return getCount();
}

代码返回正确的值,但出现以下错误:

addSum' 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.

关于这个问题有什么建议吗?

谢谢

最佳答案

除了数据类型可能会或可能不会成为问题取决于目标平台之外,您可能还需要查看调用约定。调用约定决定了负责堆栈清理的其他事物以及参数压入堆栈或分配给寄存器等的顺序。

C 代码通常使用cdecl 调用约定。

[DllImport("mydll.dll", 
SetLastError=true,
CallingConvention=CallingConvention.Cdecl)]

关于c# - 在 C# 中调用 C DLL 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4633300/

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