从c#调用UNIX和Linux共享对象文件.so

时间:2011-08-16 02:21:42

标签: c# linux mono pinvoke shared-libraries

是否可以通过C#P / Invoke调用用C编写并在Unix上构建的共享对象文件?

或者我是否需要使用Java或类似的东西?

2 个答案:

答案 0 :(得分:9)

Mono能够与基于dlopen(3)构建的C#内的本机库集成。您只需使用带有库名称的DllImport语句(即'libform.so.5'),然后使用友好的C#类包装本机代码和数据类型,该类负责处理所有低级别的东西。 This page有很多关于如何处理编组指针和其他不安全类型的信息。

一旦你编写了你的​​包装类,你就可以使用它而不用担心它正在使用下面的本机共享库这一事实。

答案 1 :(得分:1)

我会说至少可能没有简单的方法,特别是如果你的意思是Windows上的C#。在这种情况下,您需要能够解码共享对象并获取其中的代码的东西,类似于GNU / linux的ABI的重新实现。此外,任何其他库也必须存在并且可用,例如C运行时库等。这可能是一项非常重要的工作。

至于在linux / Mono下直接进行,请参阅以下答案:Calling UNIX and Linux shared object file .so from c#

您还可以尝试查看开放式办公室是否有效,http://packages.debian.org/lenny/cli-uno-bridge可能会有所帮助;但这更像是一个界面,而不是将两者直接联系在一起。