2016-11-30 316 views
3

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

+0

我很确定Visual Studio for Mac不会突然让它在Macintosh上本地执行Windows二进制文件成为可能。所以......除非我误解你的问题,否。 –

+2

你应该联系第三方并要求他们的图书馆的Mac版本。 –

+0

我无法验证它,但似乎.NET核心/标准DLL可能工作 – BradleyDotNET

回答

4

虽然你可能会认为,因为你有相同的名称作为Windows中的对应一个IDE它产生的二进制文件不可转让。

answer on Super User给出了一些详细信息:

有一个在OS X,Linux或任何POSIX没有真正的DLL文件对这一问题。 他们不做分化。

为什么?

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

虽然...

Another queston on SO问同样的事情,回答说:

最后微软发布.NET的核心是完全的平台 独立。

...现在可以在Mac或Linux机器上开发.NET应用程序 使用轻量级IDE Visual Studio代码和Visual Studio for Mac IDE已经在MacOS X上的Mono集成的地方发布。

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

3

这取决于:

  1. 管理的.NET的DLL: 可以导入和Windows
  2. 用同样的方式在VS本土DLL:不能直接使用。您需要为您的目标系统构建它,在您的情况下为OSX。

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

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

如果您有您的DLL的OSX的二进制文件,你只需要一个配置文件为您 。NET应用程序,它看起来是这样的:

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

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