Как динамической библиотеки использовать переменные класса?
динамическая библиот, QLibrary
Здравствуйте.
У меня есть динамическая библиотека с функцией
void StrategyCod2()
{
qDebug()<<"Library work2"<<NBar;
}где NBar - это переменная класса MainWindow основного приложения, вызывающего динамическую библиотеку.
Скажите пожалуйста как функции StrategyCod2() заставить выдавать переменную NBar?
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
sf
- sdfsdfkp fgskpgokspdog
- 14 жовтня 2024 р. 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:90бали,
- Рейтинг балів8
МВ
- Максим Васильев
- 02 жовтня 2024 р. 04:14
Qt - Тест 001. Сигналы и слоты
- Результат:68бали,
- Рейтинг балів-1
ЛС
- Лев Семенов
- 30 вересня 2024 р. 11:04
C++ - Тест 001. Первая программа и типы данных
- Результат:53бали,
- Рейтинг балів-4
Останні коментарі
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 07:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко05 лютого 2024 р. 01:50
Тепер обговоріть на форумі
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов03 жовтня 2024 р. 04:05
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
Кирилл Гусарев27 вересня 2024 р. 09:09
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
День добрый!
Нужно инстанцировать класс. То есть без созданного объекта класса вы не сможете использовать методы этого класса.
Но как это сделать в динамической библиотеке? Наверно нужно указать ссылку на хедер класса?
Добавил в библиотеку
А вот теперь мы плавно подобрались к нормальному подключению библиотек.
Для начала смотрим как подключаются предкомпилированные библиотеки на примере статьи о подключении boost . Подробнее посмотрите часть, где описывается QtBoostHello.pro .
Но мне нужна динамическая библиотека для изменения кода библиотеки и последующего подключения. Моя библиотека компилируется и работает, если многого от нее не хотеть.
тут проект библиотеки
Попробуйте тогда переписать инклюд ещё раз. Только таким образом.
Когда я прописал INCLUDEPATH = "C:/Qt/project/MyCandleSrick" "C:/Qt/Qt5.9.2/5.9.2/Src/qtbase/include/QtWidgets" с инклудом трудности закончились.
Зря передаёте объект окна для расчёта. Нужно передавать набор информации. Вектор значений, все эти текущие NBar, которые уже должны быть в вашем окне. Вообще, передавать объект главного окна приложения для математических расчётов это дурной тон, что ведёт к тому, что проект становится неподдерживаемым и трудночитаемым. Вы подменяете сущности и понятия своими действиями, обычно такой код без сожаления удаляют и переписывают с нуля, вместо того, чтобы разбираться, что там написано.
Скажите пожалуйста, как правильно сделать ссылку, так не работает
я бы так переписал сам метод в стратегии
Можно и так, но у меня 10 переменных и векторов, участвующих в будущем коде. Выйдет немного не читабельно.
Этот будет читабельно, если сделать специальную структуру данных, которая будет передаваться для расчёта и содержать необходимые значения.
Смысл есть. Данные для расчетов долго грузятся из файла. Проще изменить расчет перегрузить библиотеку и пересчитать, нежели все тоже проделывать с приложением. Если бы данные грузились быстрее, тогда конечно, бессмысленно .
Вы что, при каждом вызове стратегии считываете данные из файла? Сохраняйте в памяти приложения загруженные данные. Отсылайте их на расчёт, получайте результат. Не понравилось, изменить установки, заново отошлите на расчёт. При этом если данные уже считаны, то не нужно второй раз загружать с файла. Если передаётся объект по ссылке, то объект не копируется, а поэтому все изменения проделываются в объекте, который находится в окне приложения.
Установки расчета изменить не достаточно, нужно менять код(он может растягиваться на более 300 строк и порой менять его нужно весьма серьезно). А просто так изменить код в работающем приложении на С++ нельзя. Поэтому и нужна библиотека. Данный считываются только раз, или в дальнейшем при необходимости.
300 строк? ))) это мелочь... это просто ни о чём... вообще ни о чём. в ряде случаев это всего лишь час работы...
Ваши данные и установки не изменяются, стандартизация данных для расчётов полностью решает многие надуманные вами проблемы.
Это могут быть сильно различные 300 строк. И заранее описать трудно, т.к. мысли приходят в процессе работы.
Не могу создать объект класса. Если делаю так
Нужно подключить заголовочный файл этого MainWindow в код, где хотите инстанцировать.
Вот только у меня такое подозрение, что у вас этот самый MainWindow - это и есть приложение...
Ваша задумка страшна, как атомная война ))) ну серьёзно ))
По поводу больше времени - вы пробовали делать прототип и измерение времени? - нет, не делали.
Я добавил в функцию один аргумент
Ну а прототип функции кто будет правильно описывать за вас?
Спасибо, заработало.
Вообще, по хорошему, у вас должна быть возможность подключить заголовочный файл библиотеки, в котором будет объявлена структура со всеми полями. В приложении создаёте структуру и посылаете ссылку на неё в библиотеку. Библиотека всё считает и изменяет поля структуры. Даже возвращать ничего не нужно.
Но тогда какая разница, почему не сделать ссылку на класс?
Да я для примера беру эти файлы.
А вы сильны в своем стремлении создать новый принцып программирования)
Мне нужно просто решить один последний момент моей программы. Подскажите пожалуйста, как сделать рабочую ссылку на структуру или класс.
разобрался, написал так и заработало
QLibrary MyLib("C:\\Qt\\project\\build-StrategyCod-Desktop_Qt_5_9_2_MinGW_32bit-Debug\\debug\\StrategyCod"); MyLib.load(); typedef void (*MyPrototype)(MainWindow *); MyPrototype StrategyCod = (MyPrototype) MyLib.resolve("StrategyCod"); StrategyCod(&w); qDebug()<<"q1"<< q1; MyLib.unload();
Скажите, а это вы пишите на работе что то или нет?)
Нет для себя. Мне удобней такая форма. Производительность не должна страдать. Хотя конечно интерфейс не очень. Но он тут не особо нужен.
Скажите пожалуйста что не так?
Это хорошо что вы для себя пишите(или плохо), а то за такое "мне так удобно" вас бы уволили)
Но вы наслаждайтесь достижениями)
Это да. Если бы я делал это для кого-то, то наверняка иначе. Все же не могли бы помочь решить вопрос с ссылкой на объект класса. Не знаете, почему при таком вызове выдает 0? И как это поправить?
И пожалуйста не судите строго, это мое первое приложение на с++
Сделал так и заработало
Ну знаете, когда человек только учится языку программирования он слушает более знающих и понимающих. Круто что вы так уперты в своих целях. Но и слушать что вам пишут понимающие и знающие больше чем вы, нужно. Вы сейчас пишите для себя, а потом ан работу придете и будет так же писать потому что будете считать что так работает и так норм.
Но это всего лишь совет, как поступать это лично ваше дело.
Я понимаю советы, и считаю что они справедливы и правильны. Просто специфика решаемого мною вопроса толкает меня на такие действия, ну и плюс мое не знание.
А как это запустить в многопоточности, используя лямбда функцию? Этот код не работает: