Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2021, 10:16   #1
PAG
Пользователь
 
Регистрация: 07.04.2016
Сообщений: 16
По умолчанию проект DLL в VS2019 не создает import library

Сделал DLL в VS 2019 на C++ и хочу ее потестить.
В пошаговом руководстве по созданию DLL на сайте документации мелкомягкого приводится простенький пример создания DLL и ее клиента, в котором вместе с самой DLL линкер(?) создает и библиотечку импорта .lib для вызова экспортируемых функций в клиентской задаче.
Я проделал все то же самое и никакой библиотеки не создалось.
Запуск тестовой задачи не получается: говорит ссылка на неразрешенный внешний символ.
Но и сама DLL и заголовок ее экспорта включены в проект.
Поигрался всякими опциями линкера и проекта - ничего не поменялось.
Очень не хочется вручную грузить DLL и получать адреса экспортируемых функций. Это должна делать библиотечка, которая почему-то не создается, а линкер делать импорт автоматически не хочет.
Куда смотреть?
Подскажите, плз.
PAG вне форума Ответить с цитированием
Старый 13.01.2021, 11:07   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от PAG Посмотреть сообщение
Я проделал все то же самое и никакой библиотеки не создалось.
Ну, значит не совсем то проделали. На основании чего вы сделали вывод, что библиотека не создалась?

Цитата:
Сообщение от PAG Посмотреть сообщение
говорит ссылка на неразрешенный внешний символ.
А вы библиотеку подцепили? Данная ошибка говорит о том, библиотека не подключена, иначе (в сочетании с тем, что утверждаете, что библиотека не создана) текст ошибки был бы другой.

Цитата:
Сообщение от PAG Посмотреть сообщение
Но и сама DLL и заголовок ее экспорта включены в проект.
Включение заголовка отношения к линковке не имеет.
Добавление DLL в проект в виде DLL - тоже.

Вывод - вы не добавили библиотеку.
waleri вне форума Ответить с цитированием
Старый 13.01.2021, 11:44   #3
PAG
Пользователь
 
Регистрация: 07.04.2016
Сообщений: 16
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Ну, значит не совсем то проделали. На основании чего вы сделали вывод, что библиотека не создалась?
По логу сборки:
У них в примере:
1>Generating Code...
1> Creating library C:\Users\username\Source\Repos\Math Library\Debug\MathLibrary.lib and object C:\Users\username\Source\Repos\Math Library\Debug\MathLibrary.exp
1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\Math Library\Debug\MathLibrary.dll
У меня в проекте:
1>Создание кода...
1>AdlinkDIOdll.vcxproj -> D:\VCPrj\DIO_Test_2015\Debug\ADLINKDIO.dll
1>Сборка проекта "AdlinkDIOdll.vcxproj" завершена.

Цитата:
А вы библиотеку подцепили? Данная ошибка говорит о том, библиотека не подключена, иначе (в сочетании с тем, что утверждаете, что библиотека не создана) текст ошибки был бы другой.
А как я ее должен подцепить (dll)? Она числится компонентом проекта и все.

Цитата:
Включение заголовка отношения к линковке не имеет.
Добавление DLL в проект в виде DLL - тоже.

Вывод - вы не добавили библиотеку.
Вероятно так. Но как (куда) я должен ее добавить?
PAG вне форума Ответить с цитированием
Старый 13.01.2021, 12:42   #4
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от PAG Посмотреть сообщение
А как я ее должен подцепить (dll)? Она числится компонентом проекта и все.
Так lib надо подключать. Dll ни к селу, ни к городу.
FrosyaZZ вне форума Ответить с цитированием
Старый 13.01.2021, 12:49   #5
PAG
Пользователь
 
Регистрация: 07.04.2016
Сообщений: 16
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Так lib надо подключать. Dll ни к селу, ни к городу.
dll вроде как более универсальная вещь. Может использоваться в разных средах проектирования с разными компиляторами. (IMHO)
PAG вне форума Ответить с цитированием
Старый 13.01.2021, 12:55   #6
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Прочитайте, что такое dll. Для связи вашей программы с dll нужен файл lib, где "описаны какие функции экспортируются и где".
FrosyaZZ вне форума Ответить с цитированием
Старый 13.01.2021, 13:42   #7
PAG
Пользователь
 
Регистрация: 07.04.2016
Сообщений: 16
По умолчанию

Фрося, Вы наверное не прочли первый мой пост.
Я его написал именно потому, что не могу сгенерить этот самый lib.
Видимо какие-то опции надо задать, хотя перепробовал все что может подходить.
Я могу получить статическую библиотеку .LIB. Это запросто.
А библиотеку импорта - х.з. как заставить сделать. В этом вся и штука.
PAG вне форума Ответить с цитированием
Старый 13.01.2021, 13:48   #8
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Она генерируется вместе с dll. Смотрите папку.
FrosyaZZ вне форума Ответить с цитированием
Старый 13.01.2021, 14:42   #9
PAG
Пользователь
 
Регистрация: 07.04.2016
Сообщений: 16
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Она генерируется вместе с dll. Смотрите папку.
Вы наверное меня совсем за ... принимаете? И не читаете того что я тут привел в примерах.
НЕТ там НИЧЕГО. Почему и обращаюсь к публике сюда.
И вообще в папке решения нет ничего. И я привел тут выше лог сборщика. В примере у мелкософта явно присутствует создание lib-a, а у меня только DLL в логе.
Есть подозрение, что в 2019 они исключили эту процедуру нахрен и встроили связку в линкер.
Но он ругается: не находит внешних объявлений.
Пока плюнул на эту пакость мелкомягкого. Сгенерил статический Lib и пока работаю с ним.
Но сам факт непонятен. Как и реализованная в этой версии VS концепция сборки проекта с использованием DLL.
Неделя - коню под хвост. Досадно, блин!
PAG вне форума Ответить с цитированием
Старый 13.01.2021, 14:51   #10
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от PAG Посмотреть сообщение
Есть подозрение, что в 2019 они исключили эту процедуру нахрен
Ага, и у меня 2019 какая-то другая, и в офф примере https://docs.microsoft.com/en-us/cpp...?view=msvc-160 2019 прифотошоплена.

Цитата:
Сообщение от PAG Посмотреть сообщение
и встроили связку в линкер
Открою вам секрет - он всегда там был, есть и будет. И не только для длл.

Цитата:
Сообщение от PAG Посмотреть сообщение
Но он ругается: не находит внешних объявлений.
Это уже другая сборка и ругается, т.к. вы ему lib импорта не дали.

Выкладывайте уже куда-нибудь ваш проект dll, который не генерит lib.
FrosyaZZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access Violation при Import Type Library MSO.DLL hron66 Lazarus, Free Pascal, CodeTyphon 0 01.11.2019 16:22
resist color library 2.dll stanger986 Общие вопросы Delphi 4 08.01.2019 16:39
netbeans не создает проект -Cherry- PHP 0 05.09.2013 21:51
Установка пути к своим Class Library (.dll) Руслантус Общие вопросы .NET 9 01.03.2011 14:13
import dll c++ kaljan775 Помощь студентам 2 23.01.2011 18:52