gpt4 book ai didi

c# - 从 C# ESP 值调用 C++ DLL

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:18 26 4
gpt4 key购买 nike

所以我有一个用 C++ 制作的 DLL,我在 C# 中使用它。问题是我在 C++ 中使用函数指针,所以我创建了一个委托(delegate)。 hole 程序可以运行,但在它完成后我收到一个消息框,指出 ESP 的值没有为该函数保存。

我的代码:C++ 动态链接库

typedef void (*FUNCTION_TYPE)(bool);
extern "C"
{
DLL void prim(int a, FUNCTION_TYPE myF)
{
if(a < 2)
{
myF(false);
return;
}

for (int i = 2; i < a; i++)
{
if (a % i == 0)
{
myF(false);
return;
}
}

myF(true);
}
};

我的 C# 代码(调用 dll):

delegate void SOME_FUNCTION(bool isFine);

[DllImport("DLLs")]
private static extern void prim(int n, SOME_FUNCTION afisare);

static void afisare(bool isFine)
{
if (isFine == true)
Console.WriteLine("Da, e prim");
else
Console.WriteLine("Nu, nu e prim");
}

static void Main(string[] args)
{
SOME_FUNCTION myAfis = afisare;
prim(17, myAfis);
}

最佳答案

您的调用约定不匹配。 C++函数指针类型使用cdecl。托管代码采用 stdcall。像这样修复它:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
delegate void SOME_FUNCTION(bool isFine);

或者,您可以将 C++ 代码中的调用约定更改为 stdcall:

typedef void (__stdcall *FUNCTION_TYPE)(bool);

但请确保您只执行其中一项,而不是两项!

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

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