Можно ли использовать библиотеки DLL с Visual Studio Mac

У меня есть приложение, использующее стороннюю DLL. Есть ли способ в Visual Studio для Mac написать приложение для доступа к нему так же, как я могу в Windows?


person SteveFerg    schedule 30.11.2016    source источник
comment
Я почти уверен, что Visual Studio для Mac не сделает вдруг возможным выполнение двоичных файлов Windows на Macintosh. Итак ... если я не неправильно понял ваш вопрос, нет.   -  person Cody Gray    schedule 30.11.2016
comment
Вам следует связаться с третьим лицом и попросить версию его библиотеки для Mac.   -  person 500 - Internal Server Error    schedule 30.11.2016
comment
Я не могу это проверить, но похоже, что ядро ​​.NET / стандартные библиотеки DLL будут работать   -  person BradleyDotNET    schedule 30.11.2016
comment
Доступен исходный код DLL, написанный на C (astro.com/ftp/swisseph). Поскольку VS-Mac основан на Mono и Xamarin, насколько мне известно, похоже, что это могло произойти.   -  person SteveFerg    schedule 30.11.2016
comment
@CodyGray, разве это не то, что делает что-то вроде Ionic для JAVA и веб-языков? Я не думаю, что это вообще выходит за рамки возможного.   -  person sparkholiday    schedule 03.09.2017
comment
Нет. Он не заставляет двоичные файлы Windows выполняться на Macintosh или любой другой платформе. Вам понадобится компилятор, который генерирует собственные двоичные файлы, совместимые с Macintosh. Microsoft не делает ни одного. @Искра   -  person Cody Gray    schedule 03.09.2017
comment
@Cody, А, значит, это проблема нижнего уровня waaaaay. Да, это не похоже на проблему, которую нужно решать.   -  person sparkholiday    schedule 03.09.2017


Ответы (2)


По-разному:

  1. Управляемая .NET DLL: может быть импортирована и использована так же, как в VS в Windows.
  2. Собственная DLL: не может использоваться напрямую. Вам нужно будет создать его для вашей целевой системы, в вашем случае OSX.

Если у вас есть код C / C ++, вы сможете собрать его для OSX (например, с помощью GCC), если у него нет кода, специфичного для внешней (Windows) платформы. Затем вы можете напрямую использовать скомпилированный файл * .so / * .dylib. Но вам нужно указать среде выполнения .NET (например, Mono в OSX) использовать другой файл с помощью файла конфигурации DllMap (см. http://www.mono-project.com/docs/advanced/pinvoke/dllmap/ для примеров).

Связанные вами источники выглядят так, как будто они предназначены для Unix, поэтому шансы собрать их на OSX довольно высоки (есть Makefile, и полученный двоичный файл будет libswe.so в Unix). Вы можете попробовать передать параметр -dynamiclib в GCC, чтобы получить libswe.dylib для OSX (В чем разница между .so и .dylib на osx? кажется хорошим ответом на dylib)

Если у вас есть двоичный файл вашей DLL для OSX, вам просто нужен файл конфигурации для вашего .NET-приложения, который может выглядеть следующим образом:

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

Он сообщает среде выполнения .NET импортировать символы из libswe.dylib вместо libswe.dll, если текущая ОС - OSX.

person Sevo Kukol    schedule 12.12.2016

No.

Хотя вы можете подумать, что из-за того, что у вас есть IDE с тем же именем, что и у аналога Windows, создаваемые ею двоичные файлы не подлежат передаче.

ответ о суперпользователе дает дополнительную информацию:

В OS X, Linux или любом другом POSIX нет настоящих DLL. Они не делают различий.

Почему?

Многие вещи Mac, например, автономны (в конце концов, .app - это просто папки).

Хотя ...

Еще один квест по SO спрашивает то же самое, и в ответе говорится:

Наконец, Microsoft выпустила .NET Core, полностью независимую от платформы.

... теперь приложения .NET можно разрабатывать на компьютере Mac или Linux с использованием облегченной среды IDE Visual Studio Code, и была выпущена среда разработки Visual Studio для Mac, в которой интегрирован Mono для MacOS X.

Поэтому, если поставщик библиотеки (DLL), которую вы хотите использовать, создал ее версию с платформой .NET Core, вам может повезти.

person Tony    schedule 30.11.2016