Russian Qt Forum
Ноябрь 23, 2024, 13:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET  (Прочитано 8148 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Март 13, 2014, 10:48 »

Такая вот хрень может потребоваться... Группа делает специализированную СУБД для хранения результатов физических измерений, с генераторами отчетов, построением печатаемых графиков и прочей ерундой. В группе программисты C#/.NET, никто Qt не знает. А мне надо сделать управление измерительными приборами, сбор и первичную обработку, и динамическую визуализацию всяких параметров типа осциллограмм и пр., а также использовать предыдущие наработки, сделанные с использованием Qt. Группа работает на VisualStudio.

Есть ли и у кого-либо какой-либо опыт скрещивания C# программ с Qt, пусть хотя бы в VS? Что вообще нужно, чтобы Qt можно было использовать с C++ компилятором Microsoft? Сорри за боян, но я в эту сторону вообще не смотрел - всегда работаю в Креаторе с GNU-компиляторами.

Вариант обмена данными через IP-сокеты не хляет, это слишком муторно, и не подходит для задачи. Нужно, чтобы функционал на Qt содержался в динамически загружаемой библиотеке, функции которой можно было бы вызывать из C# программ, хотя бы, через extern "C" врапперы. И возможно, наоборот, потребуется вызывать что-то из главной программы на С# внутри Qt библиотеки. Засунуть Qt внутрь динамической библиотеки у меня вполне получилось, такое приложение сделано, протестировано и сдано. Но там библиотека подшивалась к С++ приложению, которое тоже компилировалось GNU. По поводу C# я не знаю почти ничего, как это вообще можно реализовать и можно ли, с учетом, что там программы работают в виртуальной машине.
Записан

2^7-1 == 127, задумайтесь...
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #1 : Март 13, 2014, 11:46 »

Qt с MSVS дружат, для удобства надо поставить аддон от Digia. Библиотек вполне достаточно уже готовых, для 2010 и 2012. А взаимодействие с C# проще, на мой взгляд, посредством ActiveQt.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Март 13, 2014, 12:43 »

Цитировать
Что вообще нужно, чтобы Qt можно было использовать с C++ компилятором Microsoft?
как минимум — скачать соответствующую версию библиотеки либо собрать самому с помощью майкрософтовского компилятора
Записан

Изучением 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
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #3 : Март 13, 2014, 12:49 »

взаимодействие с C# проще, на мой взгляд, посредством ActiveQt.
Ну... не совсем то, что хотелось бы, но что-то так можно соорудить. Очевидно, мой код надо будет оформить, как ActiveX сервер, чтобы основное приложение к нему обращалось. Так уж спроектировали, что основным приложением будет СУБД, хотя это, конечно, глупость - просто руководитель группы ни с чем, кроме СУБД, работать не умеет толком.

Но мне не вполне ясно пока, как обращаться обратно. Колбэки то они мне передать не могут. Или придется им городить у себя ActiveX контролы, чтобы я к ним обращался через QAxObject?
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Март 13, 2014, 12:51 »

Цитировать
Что вообще нужно, чтобы Qt можно было использовать с C++ компилятором Microsoft?
как минимум — скачать соответствующую версию библиотеки либо собрать самому с помощью майкрософтовского компилятора

собрать достаточно? какие-то специфичные настройки при этом нужны? их у MS много, и есть критичные - или всё уже предусмотрено?
Записан

2^7-1 == 127, задумайтесь...
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Март 13, 2014, 13:24 »

дефолтная конфигурация вполне нормальная. ненужные модули можно не собирать естественно.

например когда-то я Qt 5.0 для студии 2012 конфигурировал так:
Код:
configure -prefix %CD%\qtbase -platform win32-msvc2012 -debug-and-release -force-debug-info -opensource -confirm-license -c++11 -ltcg -fast -opengl desktop -incredibuild-xge -no-accessibility -no-dbus -no-audio-backend -no-qml-debug -saveconfig win -nomake examples -nomake demos -nomake tests -mp -sse2 -ssse3 -sse4.1 -sse4.2
nmake module-qtdoc module-qtimageformats module-qttools module-qttranslations
Записан

Изучением 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
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #6 : Март 13, 2014, 13:50 »

Но мне не вполне ясно пока, как обращаться обратно. Колбэки то они мне передать не могут. Или придется им городить у себя ActiveX контролы, чтобы я к ним обращался через QAxObject?
Так что все-таки требуется? Надо написать на Qt библиотеку, к которой должны обращаться программы С#, или самому подключиться и взаимодействовать с сервером автоматизации?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #7 : Март 13, 2014, 15:10 »

Но мне не вполне ясно пока, как обращаться обратно. Колбэки то они мне передать не могут. Или придется им городить у себя ActiveX контролы, чтобы я к ним обращался через QAxObject?
Так что все-таки требуется? Надо написать на Qt библиотеку, к которой должны обращаться программы С#, или самому подключиться и взаимодействовать с сервером автоматизации?

Надо написать библиотеку, в которой есть функции проведения измерений и некоторой первичной обработки, визуализации текущих полученных данных. Основное приложение (СУБД) будет обращаться к этим функциям за получением измеренных данных, совать их в базы, считать статистику, печатать отчеты. Но при этом из библиотеки могут быть обращения к основному приложению, ну например, чтобы при визуализации какого-нибудь параметра получить от основного приложения среднее значение параметра за день-неделю-месяц-год-десятилетие и отобразить вместе с текущим. То есть, заранее из основного приложения все значения из базы, которые могут потребоваться при визуализации, передать нельзя, потому как заранее неизвестно, какие будут нужны и сколько. Тем более, что измерительная библиотека - тоже модульная, подключили новый прибор, для него подключили DLLку, у неё свои потребности, которые заранее предусмотреть невозможно.

Понятно, что это результат кривого проектирования, когда основным приложением является СУБД, и в неё запихнуты функции, которых там не должно быть - но так уже пошло-поехало... По мне, так я бы вообще всё только на Qt сделал, и ровно наоборот - основное приложение меряет и обращается к СУБД когда требуется сохранить полученные данные или получить какие-то средние, а база тупо хранит, может посчитать статистику и отчет напечатать. Но увы, зав. зоопарком сказал - надо скрестить ежа и ужа.
« Последнее редактирование: Март 13, 2014, 15:33 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #8 : Март 13, 2014, 15:18 »

А нельзя, чтобы основное приложение само передавало данные в библиотеку? Тогда надо будет создать класс, унаследованный от QObject, определить в нем публичные слоты (через которые основное приложение будет передавать столь необходимую для работы класса информацию) и сигналы (через которые созданный класс будет оповещать и передавать результаты измерений / обработки в основное приложение). В ином случае, основное приложение тоже придется делать контроллером автоматизации, что в случае с базой данных будет, на мой взгляд, слегка геморройно.
« Последнее редактирование: Март 13, 2014, 15:20 от Hellraiser » Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #9 : Март 13, 2014, 15:31 »

А нельзя, чтобы основное приложение само передавало данные в библиотеку?

Я же говорю - неизвестно заранее, какие именно данные, сколько и когда могут потребоваться измерительной библиотеке из базы. То есть, нельзя.
Записан

2^7-1 == 127, задумайтесь...
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #10 : Март 13, 2014, 15:34 »

А что мешает, в таком случае, самому классу библиотеки обратиться к базе и выбрать из нее необходимые данные?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #11 : Март 13, 2014, 15:39 »

А что мешает, в таком случае, самому классу библиотеки обратиться к базе и выбрать из нее необходимые данные?

Тут уже не что, а кто - начальник базы.  Веселый То есть, руководитель группы, делающей СУБД.
Записан

2^7-1 == 127, задумайтесь...
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #12 : Март 13, 2014, 15:50 »

Маленькое уточнение - наверно, все-таки не СУБД, а клиентскую программу, взаимодействующую с СУБД?
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #13 : Март 13, 2014, 22:23 »

в примерах Qt есть маленький проект написанный на смеси: managed C++ и Qt
qt5: src/qtactiveqt/examples/activeqt/dotnet
qt4: src/examples/activeqt/dotnet

Статья "Управляемый С++" может быть сможет помочь, по крайней мере разобраться в вышеприведенном коде.
Так же может пригодиться статья: "Взаимодействие .NET с неуправляемым кодом".
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #14 : Март 14, 2014, 08:02 »

в примерах Qt есть маленький проект написанный на смеси: managed C++ и Qt
qt5: src/qtactiveqt/examples/activeqt/dotnet
qt4: src/examples/activeqt/dotnet

да, нашел, там много полезного, есть мануалы, типа

qt-project.org/doc/qt-5.0/activeqt/activeqt-dotnet.html

но по-прежнему пока не ясно, как строить взаимодействие, чтобы вызовы были двунаправленными
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 22.