2010-08-26 2 views
3

В чем моя главная проблема: я могу написать dll C++ с помощью VC++. Теперь dll присутствует в папке Debug.Как я могу вызвать DLL C++ Win32 из другого консольного приложения C++ win32

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

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

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

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

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

ответ

6

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

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

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

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

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

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

3

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

Чтобы ссылаться на проект .Dll из клиентского проекта, добавьте файл .lib в зависимости от компоновщика проекта проекта: Project - Properties - Linker - Input - Additional Dependencies. Чтобы убедиться, что .lib-файл можно найти с помощью компоновщика, добавьте каталог, в который помещен файл .lib, в список каталогов компоновщиков. Это может быть сделано в двух местах: локально в клиентском проекте (Project - Properties - Linker - General - Дополнительные каталоги библиотек) и в глобальном масштабе для всех проектов VC++ (Tools - Options - VC++ Directories - Libraries).

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

2

DLL можно импортировать, указав его как зависимость в настройках проекта приложения Console в 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

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

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

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

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

  3. Для того, чтобы файл .lib можно было найти компоновщиком, добавьте каталог, в который помещается .lib-файл, в список каталогов компоновщиков. Есть два места , которые можно сделать: локально в проекте клиента (Project >> Properties >> Linker >> General >> Дополнительные каталоги библиотек) и глобально, для всех проектов VC++ (Tools >> Options >> VC++ Directories> > Библиотека).

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

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

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

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

Смежные вопросы