Включение файла .lib в приложение при использовании DLL

У меня есть приложение C ++, которое использует DLL. Теперь я хочу получить доступ к методу из этой DLL в моем приложении. Но компилятор выдает мне ошибку «неразрешенный внешний символ», так как не может найти метод, даже если моя функция в DLL экспортируется правильно. Когда я добавляю путь к файлу .lib соответствующей DLL в дополнительные зависимости моего приложения, ошибка устраняется, и приложение работает правильно.

Но некоторые люди сказали мне, что я не должен включать .lib файл, когда я использую DLL. Это похоже на статическое связывание DLL.

1) Является ли включение файла .lib при использовании DLL в приложении хорошей практикой или нет?

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

2) Кто-нибудь может объяснить, зачем мне нужен класс-обертка и как этот абстрактный класс может предоставить мне требуемую мне функцию?

Заранее спасибо.

1

Решение

1) Является ли включение файла .lib при использовании DLL в приложении хорошей практикой или нет?

В соответствии с MSDN Вы должны ссылаться на .lib файлы при использовании DLL. Рассмотрение хорошей или плохой практики приходит, когда у вас есть выбор. Которого у тебя здесь нет.

они предложили мне написать некоторый класс-обертку и создать виртуальный
метод для доступа к методу из класса в DLL.

Хорошо, если вы создадите класс-оболочку, вам придется связать этот класс-оболочку с DLL, и это снова приведет вас в то же место.

1

Другие решения

Включение файла .lib при использовании dll используется всеми общими библиотеками, которые я использовал в Windows.

Важно понимать, что на платформе Windows не все библиотеки с расширением .lib являются статическими. Вот это обсуждение, которое объясняет, как понять, является ли ваша библиотека .lib статической библиотекой или библиотекой импорта.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector