Название: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Гурман от Март 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# я не знаю почти ничего, как это вообще можно реализовать и можно ли, с учетом, что там программы работают в виртуальной машине. Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Hellraiser от Март 13, 2014, 11:46 Qt с MSVS дружат, для удобства надо поставить аддон от Digia. Библиотек вполне достаточно уже готовых, для 2010 и 2012. А взаимодействие с C# проще, на мой взгляд, посредством ActiveQt.
Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: kambala от Март 13, 2014, 12:43 Цитировать Что вообще нужно, чтобы Qt можно было использовать с C++ компилятором Microsoft? как минимум — скачать соответствующую версию библиотеки либо собрать самому с помощью майкрософтовского компилятораНазвание: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Гурман от Март 13, 2014, 12:49 взаимодействие с C# проще, на мой взгляд, посредством ActiveQt. Ну... не совсем то, что хотелось бы, но что-то так можно соорудить. Очевидно, мой код надо будет оформить, как ActiveX сервер, чтобы основное приложение к нему обращалось. Так уж спроектировали, что основным приложением будет СУБД, хотя это, конечно, глупость - просто руководитель группы ни с чем, кроме СУБД, работать не умеет толком. Но мне не вполне ясно пока, как обращаться обратно. Колбэки то они мне передать не могут. Или придется им городить у себя ActiveX контролы, чтобы я к ним обращался через QAxObject? Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Гурман от Март 13, 2014, 12:51 Цитировать Что вообще нужно, чтобы Qt можно было использовать с C++ компилятором Microsoft? как минимум — скачать соответствующую версию библиотеки либо собрать самому с помощью майкрософтовского компиляторасобрать достаточно? какие-то специфичные настройки при этом нужны? их у MS много, и есть критичные - или всё уже предусмотрено? Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: kambala от Март 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 Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Hellraiser от Март 13, 2014, 13:50 Но мне не вполне ясно пока, как обращаться обратно. Колбэки то они мне передать не могут. Или придется им городить у себя ActiveX контролы, чтобы я к ним обращался через QAxObject? Так что все-таки требуется? Надо написать на Qt библиотеку, к которой должны обращаться программы С#, или самому подключиться и взаимодействовать с сервером автоматизации?Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Гурман от Март 13, 2014, 15:10 Но мне не вполне ясно пока, как обращаться обратно. Колбэки то они мне передать не могут. Или придется им городить у себя ActiveX контролы, чтобы я к ним обращался через QAxObject? Так что все-таки требуется? Надо написать на Qt библиотеку, к которой должны обращаться программы С#, или самому подключиться и взаимодействовать с сервером автоматизации?Надо написать библиотеку, в которой есть функции проведения измерений и некоторой первичной обработки, визуализации текущих полученных данных. Основное приложение (СУБД) будет обращаться к этим функциям за получением измеренных данных, совать их в базы, считать статистику, печатать отчеты. Но при этом из библиотеки могут быть обращения к основному приложению, ну например, чтобы при визуализации какого-нибудь параметра получить от основного приложения среднее значение параметра за день-неделю-месяц-год-десятилетие и отобразить вместе с текущим. То есть, заранее из основного приложения все значения из базы, которые могут потребоваться при визуализации, передать нельзя, потому как заранее неизвестно, какие будут нужны и сколько. Тем более, что измерительная библиотека - тоже модульная, подключили новый прибор, для него подключили DLLку, у неё свои потребности, которые заранее предусмотреть невозможно. Понятно, что это результат кривого проектирования, когда основным приложением является СУБД, и в неё запихнуты функции, которых там не должно быть - но так уже пошло-поехало... По мне, так я бы вообще всё только на Qt сделал, и ровно наоборот - основное приложение меряет и обращается к СУБД когда требуется сохранить полученные данные или получить какие-то средние, а база тупо хранит, может посчитать статистику и отчет напечатать. Но увы, зав. зоопарком сказал - надо скрестить ежа и ужа. Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Hellraiser от Март 13, 2014, 15:18 А нельзя, чтобы основное приложение само передавало данные в библиотеку? Тогда надо будет создать класс, унаследованный от QObject, определить в нем публичные слоты (через которые основное приложение будет передавать столь необходимую для работы класса информацию) и сигналы (через которые созданный класс будет оповещать и передавать результаты измерений / обработки в основное приложение). В ином случае, основное приложение тоже придется делать контроллером автоматизации, что в случае с базой данных будет, на мой взгляд, слегка геморройно.
Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Гурман от Март 13, 2014, 15:31 А нельзя, чтобы основное приложение само передавало данные в библиотеку? Я же говорю - неизвестно заранее, какие именно данные, сколько и когда могут потребоваться измерительной библиотеке из базы. То есть, нельзя. Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Hellraiser от Март 13, 2014, 15:34 А что мешает, в таком случае, самому классу библиотеки обратиться к базе и выбрать из нее необходимые данные?
Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Гурман от Март 13, 2014, 15:39 А что мешает, в таком случае, самому классу библиотеки обратиться к базе и выбрать из нее необходимые данные? Тут уже не что, а кто - начальник базы. :D То есть, руководитель группы, делающей СУБД. Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Hellraiser от Март 13, 2014, 15:50 Маленькое уточнение - наверно, все-таки не СУБД, а клиентскую программу, взаимодействующую с СУБД?
Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Johnik от Март 13, 2014, 22:23 в примерах Qt есть маленький проект написанный на смеси: managed C++ и Qt
qt5: src/qtactiveqt/examples/activeqt/dotnet qt4: src/examples/activeqt/dotnet Статья "Управляемый С++" (http://www.rsdn.ru/article/dotnet/mcpp.xml) может быть сможет помочь, по крайней мере разобраться в вышеприведенном коде. Так же может пригодиться статья: "Взаимодействие .NET с неуправляемым кодом" (http://www.rsdn.ru/article/dotnet/netTocom.xml). Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: Гурман от Март 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 но по-прежнему пока не ясно, как строить взаимодействие, чтобы вызовы были двунаправленными Название: Re: Очередной вопрос про ежа и ужа - скрестить Qt с... C#/.NET Отправлено: pilot.net от Май 03, 2014, 06:37 не понятно что значить "чтобы вызовы были двунаправленными"
я делал просто в хашнике Код в .cpp Код
|