|
32 / 32 / 8
Регистрация: 21.10.2009
Сообщений: 97
|
|||||||||||
Подключение dll содержащей класс21.10.2009, 11:37. Показов 10513. Ответов 7
Метки нет (Все метки)
Здравствуйте. У меня возникла проблема с динамическом подключении dll содержащей класс.
#include <windows.h>
0
|
|||||||||||
| 21.10.2009, 11:37 | |
|
Ответы с готовыми решениями:
7
Подключение dll
Подключение библиотек DLL |
|
1 / 1 / 0
Регистрация: 10.11.2009
Сообщений: 10
|
|
| 11.11.2009, 17:54 | |
|
Если вопрос ещё актуален, могу поискать сорцы, которые писал, когда столкнулся с таким же вопросом.
0
|
|
|
32 / 32 / 8
Регистрация: 21.10.2009
Сообщений: 97
|
|
| 12.11.2009, 09:30 [ТС] | |
|
Да! Было бы здорово!
0
|
|
|
1 / 1 / 0
Регистрация: 08.12.2009
Сообщений: 11
|
||||||
| 09.12.2009, 14:07 | ||||||
|
//-----------------30 october ...08 december 2009---------------
/* Мне удалось, на мой взгляд, разработать методику простого ПОЛНОГО явного (динамического) импорта класса из DLL в клиентскую часть, т.е. в EXE или DLL . Во всяком случае для простого использования я уже применил её, далее планирую протестировать для разного использования классов по мере моего, более глубокого, изучения классов C++ и работы с ними. Предлагаю оценить разработку. Суть в следующем: 1.Экспортируем через extern "C"__declspec(dllexport), для каждого экспортного класса в DLL, специальную функцию импорта, тело функции (без определения в хедере) помещаем в кодовую часть исходника DLL сразу же за телами методов класса. Внутри тела функции создаем указатель на временный объект в "куче", возвращаем его через return в вызвавший эту функцию импортирующий клиент. 2.Hader DLL с определением экспортируемого класса включаем в исходники кода (DLL и EXE) клиента и сервера(#include "dllmain.h"). Загружаем в клиенте, как обычно при динамическом импорте, файл DLL через HMODULE lib = LoadLibrary("dllproject.dll"); Вызываем нашу специальную функцию импорта объекта, получаем указатель с адресом на место даных объекта, создаем новый указатель-объект нужного класса и присваиваем объекту адрес с возвращенного указателя. Обращаемся как обычно к переменным-членам этого объекта. Все разрешенные переменные-члены этого класса уже у нас "в кармане". 3.В hader-е DLL, в определении экспортируемого класса, для каждого экспортируемого метода пишем определение переменной-члена - указателя на этот метод. Внутри тела нашей специальной функции импорта в DLL присваиваем адрес метода класса соответствующему указателю на метод класса как переменной. TempObjAdress->iMyMethod = &CMyClassB::MyMethod; Теперь можно обращаться, после сделаного в п.2, к этой переменной и получать адрес кода нужного метода класса. Через него и вызываем метод - получаем "весь мир в кармане" .(TestObject->*(TestObject.iMyMethod))(argX1, argX2, ... ); 4.Остальные наработки упрощают получение кода импорта класса, для получения большого количества методов одного класса наиболее просто работать с макросами. */ Привожу пример кода для C++ Builder 2010
0
|
||||||
|
1 / 1 / 0
Регистрация: 10.11.2009
Сообщений: 10
|
|
| 09.12.2009, 15:02 | |
|
nacgull, может я не по теме, но разве правильно возвращать из функции указатель на объект созданнй в куче? Ведь теперь становиться важно, чтоб вызывающая программа корректно удаляла этот объект. Не будет ли утечка ресурсов? В Вашем примере проскакивал delete и тот закоментирован.
0
|
|
|
1 / 1 / 0
Регистрация: 08.12.2009
Сообщений: 11
|
|||||||
| 10.12.2009, 10:46 | |||||||
. Я еще только начал более глубоко изучать С++ , поэтому еще обдумываю эту проблемку. Не во всех, но в некоторых, случаях этого примера мой C++ Builder 2010 выдавал ошибку компиляции. В начале статьи указано, что я планирую более глубоко тестировать этот способ, а также это только ПРИМЕРНЫЙ код - думаю это всё объясняет. Мне главное было выложить идею.И еще, в случае некоторых исключений c обработкой на "куче" (catch) во время возврата из создающей функции импорта, может возникнуть "затирание" инициализированых конструктором класса переменных-членов новосозданного экземпляра объекта. Кроме того, таким способом можно обращаться к методу класса не через указатель типа "метод класса", а через указатель типа "функция" (придется применять дополнительный идентификатор fMySumB):
0
|
|||||||
|
1 / 1 / 0
Регистрация: 08.12.2009
Сообщений: 11
|
||||||||||||
| 11.12.2009, 13:06 | ||||||||||||
Добавлено через 48 минут Очень хорошо рассмотрена тема подключения DLL , в частности предлагается динамический импорт класса вот , но он громоздкий и к тому же вызов метода класса ведётся через "указатель-на-функцию" вместо "указатель-на -метод-класса", что не совсем корректно и может повлечь ошибки при работе откомпиллированой программы, а также мешает проблема "искажения" ( mangle ) имен импортируемых функций с аргументами при экспорте без " extern "C" ". В разных местах Инета предлагаются разные способы динамического импорта методов класса, но они основаны на "указатель-на-функцию". Есть также хороший учебник с разделом о DLL, правда немного устаревший: Borland C++ Builder in 21 Days. Кент Рейсдорф и Кен Хендерсон, перевод на русский.
0
|
||||||||||||
| 11.12.2009, 13:06 | |
|
Помогаю со студенческими работами здесь
8
подключение dll библиотеки Подключение сторонней dll к пректу. Подключение к проекту Skype4com.dll
Подключение dll библиотек, построенных на других языках Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|