从C#(Windows)调用C函数(Linux)

本文关键字:函数 Linux 调用 Windows | 更新日期: 2023-09-27 18:25:52

我在interwebs上发现了很多关于从C#调用C函数的信息。简单的解决方案是创建一个.so文件并使用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是一个动态库,它充满了不依赖于创建平台的符号。

谢谢你的帮助。

从C#(Windows)调用C函数(Linux)

如果我的.so文件是在Linux环境中创建的,这有关系吗?

是的,这很重要。

共享对象(so)文件由链接器生成并包含代码。它们是特定于平台的。即使在两个不同的CPU上运行的两个版本的Linux也很可能无法使用相同的.so文件。

我可以把.so文件复制到Windows环境中,让C#使用它而不会出现任何问题吗?

Windows操作系统不会使用.so文件。它需要.dll文件,它们的格式完全不同(通常需要完全不同的代码才能完成相同的工作)。

我认为这并不重要,因为.so是一个动态库,它充满了不依赖于创建平台的符号。

它不仅仅是一个充满符号的文件。这也是将要执行的代码。该代码是特定于平台的。