gpt4 book ai didi

c# - 如何用Mono/C#程序调用linux/c++函数?

转载 作者:太空狗 更新时间:2023-10-29 12:25:25 28 4
gpt4 key购买 nike

我在谷歌上搜索了很多但找不到解决我非常具体的问题的方法,至少它看起来非常具体。我有以下情况:

ARM 板上的嵌入式 Linux (Debian)。我正在运行“旧的”C++ 应用程序,它们通过 CAN 总线和 SocketCAN API 发送和接收数据。

但最近我在 C# 中从事一些项目并且非常喜欢 .NET Framework,这就是我在嵌入式系统上安装 Mono 的原因。运行纯 C# 应用程序没有问题。

但现在我想通过 Mono/C# 应用程序访问 CAN 总线,这似乎是个问题,因为没有像 socketcan 这样的 api。这就是为什么我有想法调用创建和处理底层套接字操作的 c++ 函数,而我的 C# 程序处理数据。

我发现了诸如调用 C++ 函数或将 C++ 函数/类编译为 DLL 并在 C# 中调用它们之类的东西。问题是,我还没有找到如何将我的 SocketCAN/C++ 程序编译成 DLL 的解决方案,因为我的 Windows 主机上的 Visual Studio 编译器显然不知道 linux 内核可以使用实用程序。

有人知道我该如何解决这个问题吗?我可以看到可能有更多的解决方案,但我想不出一个。

最佳答案

您的图书馆是什么样子的?你能用它们创建 .so 吗?如果是,那么一切都很好。据我所知,MONO 可以在适当的级别处理互操作。

MONO Interop

请注意,您应该注意调用约定(link1link2)并可能使用完整形式:

[DllImport("mylib.so", EntryPoint = "my_func1", CallingConvention = CallingConvention::Cdecl,  CharSet = CharSet::Ansi)]

对于你的 extern "C" 我想 Cdecl 是合适的(如果不合适,检查其他的 ^-^)

来自上面 MONO 文档的链接:

Calling convention can be specified in C code by using the __stdcall and __cdecl compiler intrinsics under Microsoft Visual C++, and by using the __attribute__((stdcall)) and __attribute__((cdecl)) compiler intrinsics under GCC.

免责声明:我不使用 MONO(我也不知道您使用的是什么 C/C++ 编译器),所以您需要检查一下。

关于c# - 如何用Mono/C#程序调用linux/c++函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42901207/

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