12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
|
1 | |
Возможно ли подгрузить библиотеку так, чтоб компоновщик подгружал функции из основной программы?06.05.2014, 12:41. Показов 904. Ответов 11
Метки нет (Все метки)
Всем привет!
Хотелось бы узнать, возможно ли подгрузить библиотеку так, чтоб компоновщик подгружал функции из основной программы? Допустим есть класс A, который собирается в основной программе. Основная программа подгружает динамическую библиотеку, создаёт объект класса A, и передаёт в метод который объявлен в библиотеке указатель на данный объект. Библиотека же не сможет вызывать методы данного объекта, если они небыли объявлены как виртуальные. Возможно ли сделать так, чтоб это стало возможным?
0
|
06.05.2014, 12:41 | |
Ответы с готовыми решениями:
11
Возможно ли переделать код этой программы так, чтобы обойтись без функции? Возможно ли сделать из программы библиотеку dll? Вызов подпрограммы из основной программы, с сохранением работоспособности основной программы?(подробно внутри) Как подгрузить библиотеку? |
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
06.05.2014, 12:47 | 2 |
Для того, чтобы обратиться к атрибутам сущности в сборке (пусть, к методам класса в библиотеке), нужно, чтобы в этой сборке был как минимум доступен интерфейс класса. Ну это капитанство.
Ближе к теме: зависимость библиотеки от программы - нелогичное решение. Не надо так.
0
|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
||||||||||||||||
06.05.2014, 12:58 [ТС] | 3 | |||||||||||||||
Приложение подгружает модули, передавая указатель на некий объект, который предоставляет контроль над приложением. Допустим у нас есть интерфейс:
0
|
Неэпический
|
|
06.05.2014, 13:02 | 5 |
0
|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
|
06.05.2014, 13:07 [ТС] | 6 |
Добавлено через 1 минуту По идеи даже не соберётся.
0
|
Заблокирован
|
|
06.05.2014, 13:14 | 7 |
по этому я и спрашиваю, как ты в библиотечную функцию передаёшь экземпляр класса, если так:
void DLL_FUNC(MySuperClass *msc); - то значит, твоя dll-ка уже знает об этом классе (в dll-ке должен быть инклюдник с этим классом), а если так: void DLL_FUNC(void *HZ_CHTO_TAM) - тогда да, работать не сможешь
0
|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
||||||
06.05.2014, 13:26 [ТС] | 8 | |||||
То работать она сможет только с методом hello() и со свойством a. Метод void hello2(); будет для неё как Undefined symbols
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
06.05.2014, 14:12 | 10 |
Взаимодействие через интерфейсы - нормальный вариант. И пример в третьем посте вполне работоспособный (после доведения до компилируемого состояния).
0
|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
||||||
06.05.2014, 14:37 [ТС] | 11 | |||||
- Множество интерфейсов - Отсутствие возможности доступа к свойствам объекта.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
06.05.2014, 14:44 | 12 |
В С++ статическая типизация и нет нормальной рефлексии, что тут добавить.
0
|
06.05.2014, 14:44 | |
06.05.2014, 14:44 | |
Помогаю со студенческими работами здесь
12
Не получается подгрузить написанную библиотеку в проект Как полностью удалять программы на wine, так чтоб не осталось и следов? Нужно сделать так чтоб с одной программы работать одновременно с двух компьютеров Как при переустановке сделать так чтоб все установленные программы не пришлось переустанавливать? как сделать так, чтоб если вводишь не цифры, а буквы он не выкидывал из программы, а выполнял команду Создание файла .txt и как сделать так чтоб он не изменялся при каждом запуске программы? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |