gpt4 book ai didi

c# - 从非托管 C++ 调用 C# 代码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:23:14 28 4
gpt4 key购买 nike

在 Mono 中,您可以将委托(delegate)从 C# 传递给 C++ 函数,该函数将委托(delegate)作为函数指针。例如,这可以在 Windows 上的 C# 中完成,您可以在其中编译 native C++ 非托管库,将其链接到 C# 项目并获取 C++ 函数以通过 C# 作为委托(delegate)传递给它的函数指针调用 C# 函数?

最佳答案

在 .NET 中定义委托(delegate),然后将其传递给您的非托管代码。 CLR 会将委托(delegate)公开为函数指针,您可以从非托管代码中调用它。

互操作层不知道如何处理 C++ 中的引用。所以你需要将对象公开为指针,而不是引用。此外,.NET 不知道什么是 C++对象是(它与 System.Object 不同)。那将需要通过作为 IntPtr,我认为您在 .NET 中无法用它做很多事情。

C++ 回调:

typedef void (*CBFUNC1)(unsigned int, const char*, object&);
typedef object* (*CBFUNC2)(object*, struct _mystruct* );

代表的 C# 签名是

delegate void CbFunc1(uint param1, [MarshalAs(UnmanagedType.LPStr)] string
param2, IntPtr param3);
delegate IntPtr CbFunc2(IntPtr param1, ref _mystruct param2);

关于c# - 从非托管 C++ 调用 C# 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9731990/

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