我在网上找到了很多关于从 C# 调用 C 函数的信息。简单的解决方案是创建一个 .so 文件并使用 C# 中的 DllImport 函数导入它。
using System;
using System.Runtime.InteropServices;
public class Tester
{
[DllImport("libtest.so", EntryPoint="cfunction")]
static extern void cfunction(string message);
public static void Main(string[] args)
{
cfunction("Hello World C# => C++");
}
}
我的问题是,如果我的 .so 文件是在 Linux 环境中创建的,这有关系吗?我可以只将 .so 文件复制到 Windows 环境并让 C# 使用它而不会出现任何问题吗?我认为这无关紧要,因为 .so 是一个动态库,并且充满了不依赖于创建它的平台的符号。
感谢您的帮助。
最佳答案
does it matter if my .so file was created in a Linux environment ?
是的,这很重要。
共享对象 (so) 文件由链接器生成并包含代码。它们是特定于平台的。即使在两个不同的 CPU 上运行的两个版本的 Linux 也很可能无法使用相同的 .so 文件。
Can I just copy the .so file to a Windows environment and have C# use it without any issues ?
Windows 操作系统不会使用 .so 文件。它需要 .dll 文件,它们是完全不同的格式(并且通常需要完全不同的代码来完成相同的工作)。
I believe it shouldn't matter because .so is a dynamic library and is filled with symbols not dependent on the platform it's created on.
它不仅仅是一个充满符号的文件。它也是将要执行的代码。该代码是特定于平台的。
关于c# - 从 C# (Windows) 调用 C 函数 (Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34096629/