|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
Использование dll с зависимостями31.01.2021, 19:27. Показов 2117. Ответов 26
Метки нет (Все метки)
Всем привет.
У меня был проект dll для работы с графикой на C++ и проект на C# WPF использующий это dll. Эта связка работала нормально. Я решил выделить из dll загрузку объектов в отдельную библиотеку и сделав рефакторинг, переместил часть кода в static library. Настроил все. Теперь схема проекта такая: 1. Satic library 2. Dll использует static library 3. C# импортирует dll. Проблема заключается в том, что я получаю System.DllNotFoundException при попытке обратиться к dll в шарповом коде, хотя dll находиться в одном каталоге с exe файлом. Интересней то, что все работает корректно, если я убираю обращение к методам в static library. Я полагаю что я скорее всего как то не до конца сконфигурировал dll. Статическая библиотека и динамическая собираются без ошибок. Использую Visual Studio 2019. Есть какие ни будь мысли?
0
|
|
| 31.01.2021, 19:27 | |
|
Ответы с готовыми решениями:
26
Использование String Tables в .dll(.dll.mui) (Для VB .NET) Использование String Tables в .dll(.dll.mui) (Для C#) |
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.01.2021, 19:43 | ||
|
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 31.01.2021, 19:45 [ТС] | |
|
Консольное на плюсах или на шарпах?
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.01.2021, 19:47 | ||
|
Либо открой свою dll при помощи depends.exe, посмотри от каких dll она зависит и проверь что все они есть
Добавлено через 23 секунды
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 31.01.2021, 19:59 [ТС] | |
|
Интересно. У меня статическая библиотека это обертка над assimp, который содержит исходники и lib файл. А сейчас при запуске dll у меня сообщение о том, что невозможно найти dll этой зависимости. Имя этой dll должно полностью совпадать с lib файлом assimp. Это вообще законно, я же не могу пересобрать проект под dll?
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 31.01.2021, 20:00 | |
|
0
|
|
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 31.01.2021, 20:06 [ТС] | |
|
Да это теперь понятно. Но как такое происходит? assimp.dll у меня вообще не было. Был один проект dll который включал исходники assimp и assimp.lib - все работало. Я вынес код обертки в статическую библиотеку, перенес исходники assimp и assimp.lib в новый проект. Подключил к старому проекту dll, а теперь нужна assimp.dll. Это как так получилось?
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 31.01.2021, 20:09 | ||
|
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 31.01.2021, 20:10 [ТС] | |
|
У меня скоро мозг взорвется
![]() Можете немного по подробней, как я могу это в принципе сделать.
0
|
|
| 31.01.2021, 22:41 | |
|
Не по теме: BaredJJ, в таких случаях всегда надо остановиться, и разобраться во всем с самого начала на новом примере. Затем вернуться к старому, с уже уложившимися знаниями, и сделать все правильно.
0
|
|
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 31.01.2021, 23:20 [ТС] | |
|
Тут я с вами согласен, но иногда хороший совет можно получить быстрее. Так же разборка от простого к сложному, может занять неоправданно много времени.
Мне просто не понятно что значит сначала линковал? Как я могу влиять на порядок линковки? Так же может быть такое что lib файл был собран для линковки dll версии и при этом это могло работать когда все зависимости были в одной dll, до рефакторинга? Или это не возможно?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 01.02.2021, 00:32 | |
|
BaredJJ, lib-файл может обозначать как статическую библиотеку, так и библиотеку импорта DLL.
1
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 01.02.2021, 13:31 | ||
|
Добавлено через 4 минуты (и если зависит от dll и если не собрали с флагом -static, то потом эту dll и затребует) в смысле- сама ваша dll может затребовать свою зависимость в run-time'e ... раз она dll... что и делает
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 01.02.2021, 14:19 [ТС] | |
|
Хмм, это дей1ствительно интересно, так как до этого все работало. Lib файл был скомпилирован для dll и в исходниках был assimp.dll. А я могу как то сделать так, чтобы использовании моей GraphicCore.dll, включающей ObjectLoader.lib, включающей assimp.lib - assimp.dll была встроена внутрь или знала где можно искать эту dll, а то сейчас получается мне приходиться копировать assimp.dll в output directory?
0
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 01.02.2021, 14:29 | ||
|
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 01.02.2021, 14:30 [ТС] | |
|
Понял. Попробую пересобрать под статическую либу.
0
|
|
|
263 / 152 / 33
Регистрация: 29.06.2019
Сообщений: 1,524
|
||
| 01.02.2021, 14:48 | ||
|
можно же даже поэтапно в Makefile сделать- скомпилировать отдельно и потом слинковать всё в dll - нужную
Добавлено через 17 минут p.s. ваша lib была слинкована с вашим assimp, и при этом жёстко связана с нужной dll, которую вы пихаете в C#, насколько поняла... теперь же вы пытаетесь, насколько поняла, эту lib переделать в dll => зависимости, если и смогут установиться какие-либо, то только в run-time, а в сборке ничего ни от чего не зависит... а с вашим C# я вообще не знаю, чего вы ждёте от JIT-компилятора в run-time'e -- он не будет за MSVC выполнять его недоделанную работу (т.е. в данном случае не доработали вы, а не MSVC. - разорвав связи между 2мя dll'ями)... эти связи, мне так очень сильно кажется, в принципе можно и на уровне кода C++ оформить, не обязательно надеяться на линкер, а прямо в коде правильно LoadLibrary задействовать и правильно указатель на экспортируемые/импортируемые функции dll'и оформить ... и в любом случае не отдавать всё это (установку правильных связей/зависимостей) на откуп JIT-компилятору, который тут вообще ни при чём... имхо
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 01.02.2021, 14:59 [ТС] | |
|
Нет вы не правильно поняли. Изначально была dll которая использовала assimp.lib и часть иходников assimp. Эту dll использовал C# код.
Я вырезал код использующий assimp из dll и поместил его в static lib. Так же в новую библиотеку добавил зависимости assimp.lib и часть исходников assimp. Вот после этого все перестало работать.
0
|
|
|
388 / 334 / 65
Регистрация: 14.10.2014
Сообщений: 1,441
|
|||
| 01.02.2021, 15:04 | |||
|
Добавлено через 4 минуты
0
|
|||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 01.02.2021, 15:07 [ТС] | |
|
Я как то один раз собирал либы через CMake (cmake-gui)
0
|
|
| 01.02.2021, 15:07 | |
|
Помогаю со студенческими работами здесь
20
Использование Dll Использование DLL
Использование DLL Использование .dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|