【问题标题】:Is it possible to use DLLs with Visual Studio Mac是否可以在 Visual Studio Mac 中使用 DLL
【发布时间】:2017-04-14 04:09:28
【问题描述】:

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

【问题讨论】:

  • 我很确定 Visual Studio for Mac 不会突然让在 Macintosh 上本地执行 Windows 二进制文件成为可能。所以......除非我误解了你的问题,否则不会。
  • 您应该联系第三方并要求他们的库的 Mac 版本。
  • 我无法验证,但 .NET 核心/标准 DLL 似乎可以工作
  • DLL 的源代码可用,用 C (astro.com/ftp/swisseph) 编写。据我所知,由于 VS-Mac 基于 Mono 和 Xamarin,因此似乎有可能发生这种情况。
  • 没有。它不会使 Windows 二进制文件 在 Macintosh 或任何其他平台上执行。您需要一个编译器来生成与 Macintosh 兼容的本机二进制文件。微软没有。 @spark

标签: c# visual-studio-mac


【解决方案1】:

没有。

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

answer on Super User 提供了更多信息:

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

为什么?

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

虽然...

Another queston on SO 提出同样的问题,答案是:

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

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

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

【讨论】:

    【解决方案2】:

    这取决于:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多