Russian Qt Forum
Ноябрь 25, 2024, 05:37
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Чтение функций из строки
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Чтение функций из строки (Прочитано 6145 раз)
virtual_root
Гость
Чтение функций из строки
«
:
Июль 29, 2012, 20:33 »
Добрый вечер! Передо мной стала небольшая проблема: получаю в строке объект название класса объект которого нужно создать, и получаю в строке название функции которую нужно выполнить.
Знаю что в C# такое возможно сделать, но никогда ранее не сталкивалась с таким в с++. Ребята подскажите решение пожалуйста!
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Чтение функций из строки
«
Ответ #1 :
Июль 29, 2012, 21:07 »
см. QMetaObject, но вызывать можно только сигналы/слоты
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
virtual_root
Гость
Re: Чтение функций из строки
«
Ответ #2 :
Июль 29, 2012, 21:41 »
спасибо обязательно посмотрю, а ещё есть у кого какие идеи?
Записан
andrew.k
Гость
Re: Чтение функций из строки
«
Ответ #3 :
Июль 30, 2012, 01:39 »
Цитата: tiny developer от Июль 29, 2012, 21:41
спасибо обязательно посмотрю, а ещё есть у кого какие идеи?
Какие еще могут быть идеи?
QMetaObject newInstance invokeMethod
все что тебе нужно
Записан
mutineer
Гость
Re: Чтение функций из строки
«
Ответ #4 :
Июль 30, 2012, 10:19 »
Средствами только C++ (без Qt) такое можно сделать только вереницей if со сравнением строк
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Чтение функций из строки
«
Ответ #5 :
Июль 30, 2012, 10:45 »
Цитата: mutineer от Июль 30, 2012, 10:19
Средствами только C++ (без Qt) такое можно сделать только вереницей if со сравнением строк
Или мапой.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
virtual_root
Гость
Re: Чтение функций из строки
«
Ответ #6 :
Июль 30, 2012, 13:43 »
спасибо всем. я просто размышляла над тем, как возможно подключать плагины к готовой программе. И мне пришла идея, что можно загружать dll этих плагинов и какой-нибудь конфигурационный файлик к каждой из них должен идти. в этом файлике указано какой класс из библиотеки нужно запустить чтобы плагин заработал(сам себя поднял). Вот мне и понадобилось из строки получить название класса и создать объект.
Записан
Bepec
Гость
Re: Чтение функций из строки
«
Ответ #7 :
Июль 30, 2012, 14:30 »
Изначально плохая идея. Почитайте про систему плагинов. Плагины должны цепляться за интерфейсы.
Записан
virtual_root
Гость
Re: Чтение функций из строки
«
Ответ #8 :
Июль 30, 2012, 15:58 »
Читала. Поняла что можно сделать так:
Есть интерфейс от которого наследуются все плагины. в интерфейсе прописаны функции - шлюзы через которые между плагином и главной программой передаются данные.
Но ведь мне всё равно придется создать объект плагина, а для этого мне нужно получить его имя. Можно конечно загрузить библиотеку(плагин) через QLibrary::load(); Но тогда остаётся вопрос как мне зарезолвить функцию init() из плагина из класса А например ?
Мне не понятно как можно общаться с плагином предварительно не создав его объект иил не выделив память под указатель на него ?
«
Последнее редактирование: Июль 30, 2012, 16:13 от tiny developer
»
Записан
Kurles
Бывалый
Offline
Сообщений: 480
Re: Чтение функций из строки
«
Ответ #9 :
Июль 30, 2012, 16:26 »
Цитата: tiny developer от Июль 30, 2012, 15:58
Читала. Поняла что можно сделать так:
Есть интерфейс от которого наследуются все плагины. в интерфейсе прописаны функции - шлюзы через которые между плагином и главной программой передаются данные.
Но ведь мне всё равно придется создать объект плагина, а для этого мне нужно получить его имя. Можно конечно загрузить библиотеку(плагин) через QLibrary::load(); Но тогда остаётся вопрос как мне зарезолвить функцию init() из плагина из класса А например ?
Мне не понятно как можно общаться с плагином предварительно не создав его объект иил не выделив память под указатель на него ?
Относительно Qt посмотри в сторону QPluginLoader, в частности на его метод
QObject * QPluginLoader::instance ()
. Ну и на стандартный пример
Plug & Paint Example
.
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
Kurles
Бывалый
Offline
Сообщений: 480
Re: Чтение функций из строки
«
Ответ #10 :
Июль 30, 2012, 16:33 »
Можно, конечно, и QLibrary обойтись - определить в плагине глобальную функцию
void * instance()
например, которая будет возвращать тебе указатель на созданый ею экземпляр твоего класса, и резолвить ее с помощью
void * QLibrary::resolve(const char* symbol)
, после чего через интерфейсный класс вызывать функции плагина.
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
DmitryM
Гость
Re: Чтение функций из строки
«
Ответ #11 :
Июль 30, 2012, 16:54 »
Цитата: tiny developer от Июль 30, 2012, 15:58
Читала. Поняла что можно сделать так:
Есть интерфейс от которого наследуются все плагины. в интерфейсе прописаны функции - шлюзы через которые между плагином и главной программой передаются данные.
Но ведь мне всё равно придется создать объект плагина, а для этого мне нужно получить его имя. Можно конечно загрузить библиотеку(плагин) через QLibrary::load(); Но тогда остаётся вопрос как мне зарезолвить функцию init() из плагина из класса А например ?
Мне не понятно как можно общаться с плагином предварительно не создав его объект иил не выделив память под указатель на него ?
Создание и использование динамических библиотек, написанных на различных языках (C/C++, Pascal)
пихаешь в dll функцию аля create_plugin, которая выдаст объект плагина, и работаешь.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...