是否可以通过C#P / Invoke调用用C编写并在Unix上构建的共享对象文件?
或者我是否需要使用Java或类似的东西?
答案 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可能会有所帮助;但这更像是一个界面,而不是将两者直接联系在一起。