Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Использование классов exe из DLL


Автор: Anton Vatchenko 29.3.2011, 20:09
Есть программа, к ней в процессе работы подключаются dll-библиотеки (LoadLibrary). Столкнулся с проблемой: как использовать функционал из exe в dll. То есть как dll-плагину, к примеру, попросить приложение свернуть окно, и т.п.?
В Linux все решалось флагом -rdynamic, но в Винде даже скомпилировать dll нельзя - ругается на unresolved external.

Автор: borisbn 29.3.2011, 23:10
Цитата(Anton Vatchenko @  29.3.2011,  20:09 Найти цитируемый пост)
к примеру, попросить приложение свернуть окно, и т.п.?В Linux все решалось флагом -rdynamic

не очень сведущь в Linux, поэтому просьба: объясните, пожалуйста, как *.so-шник, скомпилированный и слинкованный в отдельный модуль при помощи одного ключа компидяции узнаёт о функциях приложения, которое его загрузило ?
Цитата(Anton Vatchenko @  29.3.2011,  20:09 Найти цитируемый пост)
в Винде даже скомпилировать dll нельзя

и ещё вопрос: насколько я знаю (может и ошибаюсь, конечно) в Винде нет встроенного компилятора, как почти во всех сборках Линукса, поэтому объясните как Вы в Венде компилируете dll-кую

Sorry, что задаю вопросы в Вашей теме, но это для того, чтобы попытаться понять, как помочь

Автор: GremlinProg 30.3.2011, 06:25
Цитата(Anton Vatchenko @  29.3.2011,  22:09 Найти цитируемый пост)
как использовать функционал из exe в dll

стандартное решение - выделить общий функционал из exe в отдельную DLL и использовать ее в обоих модулях

Автор: Anton Vatchenko 30.3.2011, 07:19
Я так думал, что 99% людей под виндой компилируют в VS, как и 99% в Линуксе компилируют через g++. В линуксе совершенно спокойно можно скомпилировать библиотеку даже если она не находит каких-то реализаций. Затем в процессе работы приложения после подгрузки библиотеки эти реализации как-то находятся. Я не в курсе, но работает.

Пытался сделать отдельную библиотеку, но если бы можно было выделить как-то область, используемую в DLL. А так придется собрать прямо все приложение в DLL, а в exe запихнуть только main. Да и столкнулся с ошибками компиляции, что std::-подобные объекты должны быть тоже экспортированы и т.п.

Добавлено через 2 минуты и 6 секунд
Кстати, получилось в EXE проэкспортировать некоторые функции, рядом с exe появился lib, который прописал всем библиотекам. Работает, но не знаю хорошее ли это решение.

Автор: Earnest 31.3.2011, 18:00
Цитата(Anton Vatchenko @  30.3.2011,  08:19 Найти цитируемый пост)
Кстати, получилось в EXE проэкспортировать некоторые функции,

Нормальное, exe от DLL не сильно отличается - из обоих можно экспортировать функции. Я, правда, обычно динамически (т.к. через GetProcAddress) делаю, никаких проблем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)