У меня есть приложение C ++, которое использует DLL. Теперь я хочу получить доступ к методу из этой DLL в моем приложении. Но компилятор выдает мне ошибку «неразрешенный внешний символ», так как не может найти метод, даже если моя функция в DLL экспортируется правильно. Когда я добавляю путь к файлу .lib соответствующей DLL в дополнительные зависимости моего приложения, ошибка устраняется, и приложение работает правильно.
Но некоторые люди сказали мне, что я не должен включать .lib файл, когда я использую DLL. Это похоже на статическое связывание DLL.
1) Является ли включение файла .lib при использовании DLL в приложении хорошей практикой или нет?
Чтобы избежать включения этого файла .lib и избежать вызова GetProcAddess для каждого экспортируемого метода, они предложили мне написать некоторый класс-обертку и создать виртуальный метод для доступа к методу из класса в DLL. Я не понял этот подход.
2) Кто-нибудь может объяснить, зачем мне нужен класс-обертка и как этот абстрактный класс может предоставить мне требуемую мне функцию?
Заранее спасибо.
1) Является ли включение файла .lib при использовании DLL в приложении хорошей практикой или нет?
В соответствии с MSDN Вы должны ссылаться на .lib файлы при использовании DLL. Рассмотрение хорошей или плохой практики приходит, когда у вас есть выбор. Которого у тебя здесь нет.
они предложили мне написать некоторый класс-обертку и создать виртуальный
метод для доступа к методу из класса в DLL.
Хорошо, если вы создадите класс-оболочку, вам придется связать этот класс-оболочку с DLL, и это снова приведет вас в то же место.
Включение файла .lib при использовании dll используется всеми общими библиотеками, которые я использовал в Windows.
Важно понимать, что на платформе Windows не все библиотеки с расширением .lib являются статическими. Вот это обсуждение, которое объясняет, как понять, является ли ваша библиотека .lib статической библиотекой или библиотекой импорта.