4

我有一个使用第三方 DLL 的应用程序。Visual Studio for Mac 中有没有一种方法可以像在 Windows 上一样编写应用程序来访问它?

4

2 回答 2

6

这取决于:

  1. 托管 .NET DLL:可以像在 Windows 上的 VS 中一样导入和使用
  2. Native DLL:不能直接使用。您需要为您的目标系统(在您的情况下为 OSX)构建它。

如果你有 C/C++ 代码,如果它没有一些外国(Windows)平台特定代码,你应该能够为 OSX(例如使用 GCC)构建它。然后就可以直接使用编译好的*.so/*.dylib文件了。但是您需要告诉 .NET 运行时(例如 OSX 上的 Mono)使用 DllMap 配置文件使用不同的文件(请参阅http://www.mono-project.com/docs/advanced/pinvoke/dllmap/举些例子)。

您链接的源看起来像是用于 Unix,因此能够在 OSX 上构建它们的机会非常好(有一个 Makefile,生成的二进制文件将是 Unix 上的 libswe.so)。您可以尝试将-dynamiclib参数传递给 GCC 以获取特定于 OSX 的 libswe.dylib(osx 上的 .so 和 .dylib 之间有什么区别?似乎是关于 dylib 的一个很好的答案)

如果你有 OSX 的 DLL 二进制文件,你只需要一个 .NET 应用程序的配置文件,它可能如下所示:

<configuration>
    <dllmap os="osx" dll="libswe.dll" target="libswe.dylib"/>
<configuration/>

它告诉 .NET 运行时导入符号,libswe.dylib而不是libswe.dll当前操作系统是否为 OSX。

于 2016-12-12T22:51:04.430 回答
4

不。

尽管您可能认为因为您有一个与 Windows 对应的 IDE 同名,所以它生成的二进制文件是不可传输的。

超级用户的答案提供了更多信息:

在 OS X、Linux 或任何 POSIX 中都没有真正的 DLL。他们不做区分。

为什么?

很多 Mac 的东西,其中之一,是自包含的(毕竟.app 真的只是文件夹)。

虽然...

SO上的另一个问题问同样的事情,答案是:

最后微软发布了完全独立于平台的.NET Core。

... 现在可以使用轻量级 IDE Visual Studio Code 在 Mac 或 Linux 机器上开发 .NET 应用程序,并且已经发布了 Visual Studio for Mac IDE,其中集成了 MacOS X 上的 Mono。

因此,如果您要使用的库 (DLL) 的供应商已经使用 .NET Core 框架创建了它的一个版本,那么您可能很幸运。

于 2016-11-30T00:30:10.120 回答