Как я могу вызвать C ++ Win32 DLL из другого консольного приложения C ++ win32 - PullRequest
3 голосов
/ 26 августа 2010

Что меня беспокоит, так это то, что я могу написать DLL на C ++ с использованием VC ++.Теперь DLL находится в папке отладки.

Как я могу использовать мою DLL в другом консольном приложении C ++.Как добавить ссылку или связать библиотеку DLL с приложением.

Еще один момент, при создании библиотеки DLL мастер VC ++ предоставляет мне вариант:

  1. Пустой проект DLL
  2. Простой проект DLL
  3. DLL, которая экспортирует некоторый символ

Теперь, согласно статье из CP , я использовал третий вариант.( Невозможно следовать, поскольку dll использовалось приложением MFC. Некоторые из них немного продвинулись в данный момент )

Нужно ли мне всегда выбирать третий вариант?Что означают два других варианта?

Ответы [ 4 ]

6 голосов
/ 26 августа 2010

Не совсем уверен, что вы спрашиваете, но:

На самом деле не имеет значения, какой вариант вы используете, это просто вопрос того, что волшебник делает для вас; если вы используете третью опцию, мастер создаст бит в вашем заголовочном файле, который выглядит следующим образом:

#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

Способ, которым это работает, заключается в том, что в проекте DLL TEST_EXPORTS определяется в параметрах компилятора, поэтому TEST_API оценивает dllexport, тем самым сообщая компоновщику экспортировать эти символы. Если вы включаете этот заголовок в другой проект, он определяет TEST_API как dllimport, который указывает компилятору ссылаться на него во время выполнения в DLL. Этот #define метод экспорта символов широко используется и легко читается.

Чтобы вызвать функцию / класс внутри DLL, вам нужно экспортировать символы одним из двух способов: а) использование __declspec (dllexport) [это кажется более удобным вариантом почти во всех случаях] ИЛИ б) использование файла .DEF в вашем проекте

Также хотелось бы отметить, что вам нужно включить либо проект DLL в ваше решение для файла .exe, либо .lib, сгенерированный компиляцией DLL.

3 голосов
/ 26 августа 2010

Вы можете использовать «DLL, которая экспортирует некоторый символ», чтобы узнать, как должен быть построен проект Dll. Как только вы поймете это, используйте «Простой проект DLL». Вы можете всегда начинать с «DLL, которая экспортирует некоторый символ» и изменять код, сгенерированный Wizard, заменяя образец экспортированного класса / функции / символа своим собственным кодом.

Чтобы сослаться на проект .Dll из клиентского проекта, добавьте файл .lib к зависимостям компоновщика клиентского проекта: Проект - Свойства - Компоновщик - Ввод - Дополнительные зависимости. Чтобы компоновщик мог найти файл .lib, добавьте каталог, в котором находится файл .lib, в список каталогов компоновщика. Это можно сделать в двух местах: локально в клиентском проекте (Project - Properties - Linker - General - Дополнительные каталоги библиотек) и глобально для всех проектов VC ++ (Tools - Options - VC ++ Directoryies - Libraries).

Последнее, что нужно сделать, это убедиться, что DLL может быть загружена клиентом .exe во время выполнения. Dll должна находиться в текущем каталоге, каталоге исполняемых файлов, Windows, системном каталоге или быть доступной через переменную PATH.

2 голосов
/ 26 августа 2010

DLL можно импортировать, указав ее в качестве зависимости в настройках проекта Консольного приложения в Visual Studio, как описано Алексом Фарбером.Вы должны убедиться, что приложение может найти DLL, поместив DLL в любое место, указанное в переменной PATH.Вы также можете программно загрузить DLL в свое приложение, используя метод LoadLibrary (см. Документацию здесь http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx), и вызвать метод, экспортированный в DLL, используя функцию GetProcAddress (см. http://msdn.microsoft.com/en-us/library/ms683212(VS.85).aspx).

1 голос
/ 25 февраля 2014

Выполните следующие шаги, чтобы настроить два проекта. http://msdn.microsoft.com/en-us/library/ms235636.aspx

В этих инструкциях новый проект добавляется к тому же решению который содержит DLL. Это может быть не так в большинстве ситуации. Если у вас есть два отдельных проекта, которые вы хотите немного измените описанную выше процедуру следующим образом.

  1. В проекте DLL убедитесь, что вы настроили создание DLL файл. Для этого нажмите на проект в обозревателе решений и перейти к свойствам. В разделе Свойства конфигурации >> Общие, измените Тип конфигурации "Динамическая библиотека (.dll)". Теперь скомпилируйте динамическая библиотека ссылок, выбрав в меню Build, Build Solution бар.

  2. Создайте другой проект и файлы, как указано в ссылке. к использовать DLL в приложении, вы должны ссылаться на него. Для этого добавьте Файл lib, созданный из динамической библиотеки. Файл lib создан в той же папке, что и DLL. Если Visual Studio была использована в режим отладки, это будет в Project >> Folder >> Debug. Если режим выпуска был используется, папка проекта >> релиз. Чтобы использовать файл lib в приложении, перейдите на Проект >> Свойства >> Линкер >> Ввод >> Дополнительные зависимости и добавьте имя файла lib в список («AFR24x7.lib» в моем случай).

  3. Чтобы убедиться, что файл .lib можно найти по компоновщику, добавьте каталог, где Файл .lib помещается в список каталогов компоновщика. Есть два места, где это можно сделать: локально в клиентском проекте (Project >> Properties >> Linker >> General >> Дополнительные каталоги библиотеки) и глобально, для всех проектов VC ++ (Инструменты >> Параметры >> Каталоги VC ++ >> Библиотеки).

  4. Добавьте файл включения, как указано в ссылке.

  5. Скопируйте созданный файл DLL и вставьте его в выпуск приложения. папки отладки (если вы используете обе).

  6. Выполните остальные шаги, кроме установки зависимостей приведены в ссылке.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...