Использование DLL с неуправляемым кодом в Visual Studio 2010? - PullRequest
1 голос
/ 22 ноября 2010

Я довольно новичок в C ++ и пытаюсь понять, как использовать библиотеку TagLib для проекта, над которым я работаю. Я работаю с неуправляемым C ++ в Visual Studio 2010 на Windows 7 64bit. Раньше я никогда не пользовался внешней библиотекой, поэтому я очень озадачен тем, как это сделать.

С этой записи в блоге Я получил файлы libtaglib.a и taglib.dll. Я наткнулся на этот SO вопрос о том, как использовать TagLib, но он касается QT Creator, а не Visual Studio, и я недостаточно осведомлен о предмете, чтобы понять, что говорят, чтобы перевести его в то, что нужно сделано для Visual Studio.

Итак, несколько вопросов:

  • Возможно ли вообще сделать это с неуправляемым кодом?
  • Какова функция файла .a?
  • Самое главное, как мне использовать taglib.dll в моей программе ??

Я всюду по Google искал способ сделать это, но моя главная проблема в том, что все, с чем я сталкиваюсь, у меня над головой. Пожалуйста, дайте мне знать, если требуется дополнительная информация. Любая помощь очень ценится! Спасибо!

Ответы [ 3 ]

4 голосов
/ 23 ноября 2010

Кажется, я успешно сработал.Вот примерный план того, что я сделал:

1.) Я использовал CMake для генерации решения Visual Studio.

2.) Я попытался построить проект тегов в решении VS, ноэто не удалось.

3.) Я внес исправления в несколько исходных файлов, как указано здесь: http://old.nabble.com/taglib-fails-to-compile-with-MS-VC%2B%2B-2010-td29185593.html

4.) Я снова создал проект тегов в режиме выпуска.На этот раз все прошло успешно.

5.) Я скопировал полученные файлы dll, def и lib в тот же каталог, что и исходные файлы для моего проекта.

6.) Я скопировалфайлы заголовков из источника taglib в подкаталог в моем проекте (не уверен, что это очень хорошая практика)

7.) В настройках моего проекта я установил подкаталог с файлами заголовков в качестве дополнительного каталога include.

8.) Я добавил файлы dll, exp и lib в свой проект, просто выбрав «Добавить> Существующий элемент».

9.) Я добавил код из примеров taglib и собрал его,Все работало, так что я думаю, что я понял.

Одна оговорка, с которой я столкнулся, поскольку DLL была построена в режиме выпуска, мой проект должен был быть запущен в режиме выпуска, иначе он потерпит крах.Я предполагаю, что если бы я заменил DLL на встроенную в режиме отладки, я мог бы запустить свою программу в режиме отладки, но я не пробовал это.

3 голосов
/ 22 ноября 2010

Вы не можете использовать библиотеки, специфичные для GCC (вы можете сказать, что они имеют расширения .a) с Visual Studio. Вам нужно будет собрать библиотеку из исходного кода, чтобы использовать ее с MSVC. Как только вы это сделаете, просто добавьте .lib, сгенерированный в процессе сборки, в ваш проект, и все должно работать «из коробки». (Обратите внимание, что это .lib, вам нужно, компилируете ли вы для динамического линкования или нет - не имеет значения в msvc land)

РЕДАКТИРОВАТЬ - после просмотра самого TagLib -

Чтобы скомпилировать TagLib, вам нужно получить систему сборки CMake и сам TagLib , а CMake создаст решение для визуальной студии. Используя это решение, вы сможете создавать .lib s и .dll s, которые вам нужны. Обратите внимание, что поскольку TagLib является библиотекой KDE, вам, вероятно, потребуется также собрать некоторые биты QT, чтобы все работало успешно. Тем не менее, у меня нет особого опыта работы с библиотекой, поэтому я не буду здесь так полезен.

1 голос
/ 22 ноября 2010

Yo не нужно перекомпилировать исходный код (для создания .lib-файла), если у вас есть .dll-файл. С помощью dumpbin / exports и lib (оба поставляются с Visual Studio) вы можете создать библиотеку, которую вы можете связать с вашим приложением. В этой ссылке вы можете увидеть приятное объяснение: http://www.coderetard.com/2009/01/21/generate-a-lib-from-a-dll-with-visual-studio/

Но, как сказал Билли Саид, вероятно, вам понадобятся другие части QT, чтобы использовать эту библиотеку.

...