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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2021, 11:30   #1
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию Подключить стороннюю С++ DLL к проекту на VS2019

Есть сторонняя DLL от поставщика оборудования с примером использования на VC++.
Полгода назад я работал с ней, подключая к проекту на стареньком BCB6. Все замечательно сварилось и работало.
Но потребовалось подключить еще одно оборудование к тому же проекту и поставщик предоставил объектную библиотечку программного интерфейса тоже с примером на VC++.
Пользоваться устаревшей средой не стал и с граблями, но собрал демонстрашку поставщика на VS2019.
Но попытка подцепить DLL, с которой я уже игрался в BCB6, окончилась провалом.
Провал получается на функции LoadLibrary(DllPath).
Эта функция прекрасно работала в старом компиляторе, и отказалась работать в проекте на VS2019.
Ладно, чертыхнулся и попробовал вернуться в старую среду BCB6.
Хрен тебе! VS2019 видимо обновила системный отладчик, и старая среда падает при попытке его подцепить.
Но ведь проект работал в старой среде!

Вопрос к знатокам: как "опустить" VS2019 так, чтобы можно было использовать функцию LoadLibrary для подгрузки сторонней DLL?
Или есть иные пути решения? Или .Net так подмяла под себя средства разработки, что "назад пути нет"?

Последний раз редактировалось AnPis; 15.01.2021 в 12:37.
AnPis вне форума Ответить с цитированием
Старый 15.01.2021, 12:29   #2
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

LoadLibrary прекрасно работает на VS2019. Куча проектов на вулкане ее используют.
FrosyaZZ вне форума Ответить с цитированием
Старый 15.01.2021, 12:42   #3
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию

Я думал что что-то с путем к DLL (она лежала в стороне, в папке с SDK).
Добавил непосредственно в папку с exe, тот же результат: LoadLibrary выдает ошибку (ноль).
Что может не нравиться?

ПС: в SDK от поставщика есть примерчик на C#. Он нормально запускается.
Но я уже пробовал подключать вчерашнюю библиотеку в проект C# - не хочет, говорит несовместима с .Net.
Поэтому взялся за пример из того же SDK на С++.

Последний раз редактировалось AnPis; 15.01.2021 в 12:53.
AnPis вне форума Ответить с цитированием
Старый 15.01.2021, 13:23   #4
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от AnPis Посмотреть сообщение
LoadLibrary выдает ошибку (ноль).
Что может не нравиться?
GetLastError что пишет?
FrosyaZZ вне форума Ответить с цитированием
Старый 15.01.2021, 13:33   #5
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию

Я так понимаю, что вопрос опять упирается в отсутствие библиотеки импорта.
В SDK присутствуют только файлы DLL.
Линкер в протоколе сборки пишет: "сборка модуля выполнена без символов". и выгружает ее.
Старая среда видимо автоматически генерила функции поиска адресов, а теперь новая видимо не умеет этого делать и хочет библиотеку импорта.
Не зря говорится: старый друг лучше новых двух...

Последний раз редактировалось AnPis; 15.01.2021 в 13:35.
AnPis вне форума Ответить с цитированием
Старый 15.01.2021, 13:34   #6
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Нет. Не генерила. Для LoadLibrary не нужна либа импорта. GetLastError что возвращает?
FrosyaZZ вне форума Ответить с цитированием
Старый 15.01.2021, 13:57   #7
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию

Возвращает ошибку 193: "%1 не является приложением win32".
Видимо формат exe-файла не соответствует формату библиотеки. Надо поштудировать опци проекта.
Переключил с 64 на 32 - тот же эффект и тот же код ошибки.

Последний раз редактировалось AnPis; 15.01.2021 в 14:01.
AnPis вне форума Ответить с цитированием
Старый 15.01.2021, 14:02   #8
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Выкладывайте dll
FrosyaZZ вне форума Ответить с цитированием
Старый 15.01.2021, 14:47   #9
AnPis
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 30
По умолчанию

Вот тут:
https://yadi.sk/d/X9k3x1TcY-VD8Q
Но эта DLL нормально работает в проекте на BCB6
На всякий случай выложил этот консольный демопроектик:
https://yadi.sk/d/0eEBRJD0bSWSOQ
Правда чуток его поковырял: пробовал разный пути к DLL и вывод кода ошибки.
Не помню, какой он в архиве 64 и 32 битный.
Хочется понять причину затыка.
Я в VS2019 новичок. Последний раз лет пять назад работал в VS2008.
AnPis вне форума Ответить с цитированием
Старый 15.01.2021, 15:30   #10
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Проверяйте пути. И пустой проект, и ваш работает (естественно, вин32 вариант):
Изображения
Тип файла: jpg Untitled.jpg (103.7 Кб, 2 просмотров)
FrosyaZZ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проект DLL в VS2019 не создает import library PAG Visual C++ 12 14.01.2021 07:55
Пытаюсь подключить к Unity стороннюю среду разработки. realLarkin Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 14.12.2019 20:21
Подключить dll к проекту Fakov Общие вопросы Delphi 10 16.06.2018 16:01
Как подключить .dll файл к проекту free6878 Помощь студентам 0 03.07.2011 14:33
VC++. Подключить DLL к проекту. TwiX Visual C++ 5 20.06.2011 01:46