@Hocksten

C++ загрузка библиотек и dll из определенного файла?

Столкнулся с проблемой загрузки библиотек из определенного файла.
Подключил SFML к проекту, работает все замечательно.
Есть файл main.cpp и sfml.h, как сделать, что бы при загрузки класса из функции (в файле sfml.h) загружались и сами библиотеки с dll файлами, а не целиком в проекте?Заранее спасибо
  • Вопрос задан
  • 1772 просмотра
Решения вопроса 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Если я правильно понял, речь идет о позднем связывании? Классы из DLL "просто так" не загружаются, схема такая:

Подготовка:
Сделать в dll экспортируемую функцию, которая будет возвращать указатель на экземпляр интерфейса класса.

Использование:
Загрузить dll - LoadLibrary()
Найти создающую функцию для данного класса - GetProcAddress()
Вызвать создающую функцию.
Работать с классом по указателю.

Это все будет работать стабильно только при условии, что dll и приложение создаются одинаковым компилятором с одинаковыми настройками.
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C++
Армянское Радио указал вам правильное направление (т.е. если вы не хотите СРАЗУ грузить dll при запуске exe-шника, а хотите сделать это позже), но вам следует учесть, что:
1) загружать все равно придется вручную, механизма в C++ для автоматической подгрузки dll именно в момент обращения к функции из нее не существует
2) загрузка вручную приводит вас к тому, что линковщик не будет связывать ваш exe и dll. Это значит, что вы не сможете пользоваться предварительными объявлениями функций в хедере - вам пригодятся только типы, а указатели на код функций нужно будет получать динамически, как сказал Армянское Радио - по GetProcAddress(). Собственно, это за вас делает ОС при обычной линковке exe и dll.
3) пункты 1 и 2 разумеется актуальны только для DLL, для тех "DLL", которые на самом деле не DLL, а дотнетовские сборки, свои правила, не имеющие ничего общего с этими (там сборки и так по-дефолту грузятся в момент первого использования типа из этой сборки);

С учетом всего сказанного, неясно, зачем это вам: в 99% случаев динамическая загрузка нужна для реализации "плагинов" - когда заранее неизвестно, какая DLL будет загружена, чтобы потом можно было без перекомпиляции подсунуть любую DLL, если она экспортирует требуемые функции (для примера - плагины в foobar 2000).
У вас же нужно вполне конкретно загрузить SFML, так что непонятно зачем вам такие заморочки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Hocksten Автор вопроса
Пишу движек на smfl и c++ cli,
По нажатии кнопки создаётся окно с параметрами ширина,высота,имя окна.
Когда нажимаб кнопку, окно создаётся нормально, а после закрытия закрывается и сама форма(проект).Заметил что открывается консоль (sfml) вместе с загрузкой формы, думаю что из-за этого
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы