Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.98.108] |
|
Сообщ.
#1
,
|
|
|
Есть работающее консольное приложение на C++ (Visual Studio 2010), в котором идет обращение к функциям Windows API и сторонней DLL, для которой имеются заголовочный файл, файл Lib и DLL. Исходные данные для работы программы находятся в файле XML, обращение к этому файлу идет через библиотеку boost. Программу делал я, она очень далека от идеала, но работает. Возникла задача создать графический интерфейс программы для установки параметров программы, вывода графиков и др. Я слышал о следующих возможностях:
- создание проекта C++ Windows Forms. Не знаю, насколько при этом тяжело будет обеспечить работу функций Windows API, сторонней и boost библиотеки; - перевод программы на QT. Раньше с QT не работал, перейти с Visual Studio на QT для меня будет, наверное, непросто; - создание GUI на C#, создание из консольной программы DLL и обращение к функциям DLL из C#. На C# раньше делал простые GUI приложения, несколько раз вызывал из них простые DLL, которые сам и делал. Хотел бы узнать о достоинствах и недостатках этих путей решения моей задачи. |
Сообщ.
#2
,
|
|
|
Поздравляю, ты пополнил ряды счастливцев, проигнорировавших FAQ-раздел!
Графический интерфейс пользователя в приложениях на языке C++ Добавлено От себя добавлю, что для конкретно твоей задачи оптимальным было бы решение на шаблонах диалогов, по-сути, требующее одной единственной правки в проекте: смене типа с _CONSOLE на _WINDOWS, и, соответственно, main на WinMain. |
Сообщ.
#3
,
|
|
|
MFC однозначно
|
Сообщ.
#4
,
|
|
|
Спасибо за ссылку. Прочитал, понял. Попробую сделать на основе диалогов
|
Сообщ.
#5
,
|
|
|
M Не забываем про использование функции "Вопрос решён!" |
Сообщ.
#6
,
|
|
|
Переделал программу с Console на Windows (проект RecordSoundWin). Работает нормально, спасибо за подсказку. Решил вначале поработать с проектом Windows Forms, а затем на основе проекта RecordSoundWin создать приложение на основе диалогов. Создал приложение Windows Form в Visual C++ 2010 (RecordSoundNet), посмотрел код. Сделал следующие выводы:
- в Net проекте Visual C++ напрямую не удастся использовать функцию GetAsioInfo из проекта RecordSoundWin, надо писать какую-то Net-обертку для этой функции; - в Net проекте Visual C++ не удастся впрямую вызывать функции WinAPI; - для моей задачи единственный способ создать графический интерфейс в Visual С++ (с MFC и QT пробовал работать, не понравилось) без использования сторонних библиотек - это создание приложения на основе диалогов. Правильны ли мои выводы? Прикреплённый файлRecordSoundWin.zip (22,97 Кбайт, скачиваний: 150) Прикреплённый файлRecordSoundNet.zip (11,65 Кбайт, скачиваний: 131) |
Сообщ.
#7
,
|
|
|
Цитата tuchin @ Переделал программу с Console на Windows (проект RecordSoundWin). Работает нормально, спасибо за подсказку. Решил вначале поработать с проектом Windows Forms, а затем на основе проекта RecordSoundWin создать приложение на основе диалогов. а где диалоги? MFC в зубы и вперед с песней |
Сообщ.
#8
,
|
|
|
Я же указал, что сначала решил попробовать Windows Form. Приложение на основе диалогов (в крайнем случае на MFC буду делать тогда, когда буду уверен, что для моей задачи Visual C++ Windows Form не подходит.Для этого и задал вопросы о возможностях Windows Form применительно к решению моей задачи (использование сторонних библиотек и WinAPI)
Добавлено RecordSoundWin не содержит пока диалогов. Я прикрепил его для того, чтобы было ясно, какого типа библиотеки используются и возможно ли их использование в NET C++ без создания сложных NET-оберток |
Сообщ.
#9
,
|
|
|
Цитата tuchin @ Я же указал, что сначала решил попробовать Windows Form. Приложение на основе диалогов (в крайнем случае на MFC буду делать тогда, когда буду уверен, что для моей задачи Visual C++ Windows Form не подходит.Для этого и задал вопросы о возможностях Windows Form применительно к решению моей задачи (использование сторонних библиотек и WinAPI) Да какой C#! Windows Forms для .NET C#, MFC для Win32 API C++. Все! |
Сообщ.
#10
,
|
|
|
Зачем же тогда создали в Visual C++ проект Windows Form?
Добавлено Я думал, что этот тип проекта создан для того, чтобы совместить легкость создания интерфейса C# и низкоуровневые возможности С/C++ |
Сообщ.
#11
,
|
|
|
Цитата tuchin @ Зачем же тогда создали в Visual C++ проект Windows Form? Я думал, что этот тип проекта создан для того, чтобы совместить легкость создания интерфейса C# и низкоуровневые возможности С/C++ думаю для переноса готовых Win32 приложений на .Net платформу ИМХО писать программу под .Net на С++ изврат есть полноценный для этого язык C#. Хотя флаг в руки! |
Сообщ.
#12
,
|
|
|
По-моему, ответы на вопросы автора (сообщение 6) так и не были даны. Мне бы тоже хотелось бы узнать ответы на вопросы:
1. Можно ли в Net проекте Visual C++ напрямую использовать функцию (у автора функцию GetAsioInfo), работающую со сторонней библиотекой сишной библиотекой (у автора это bassasio и boost) или нужно создавать Net-обертку для этой функции. 2. Можно ли в Net проекте Visual C++ напрямую вызывать функции WinAPI. Я понял автора так: он понимает, что на С# создавать графический интерфейс удобнее и быстрее, но что делать с функциями, которые у него обращаются напрямую к сишным библиотекам и уже работают в проекте на С++? И вопрос в том, позволяет ли Net проект C++ задействовать отлаженные функции, используя для разработки интерфейса Net технологию. Добавлено Цитата Cfon @ Вот в этом и вопрос. Как перенести готовое Win32 приложение на Net платформу, не создавая оберток для специфических для C++ функций. думаю для переноса готовых Win32 приложений на .Net платформу |
Сообщ.
#13
,
|
|
|
Цитата tumanovalex @ По-моему, ответы на вопросы автора (сообщение 6) так и не были даны. Мне бы тоже хотелось бы узнать ответы на вопросы: 1. Можно ли в Net проекте Visual C++ напрямую использовать функцию (у автора функцию GetAsioInfo), работающую со сторонней библиотекой сишной библиотекой (у автора это bassasio и boost) или нужно создавать Net-обертку для этой функции. 2. Можно ли в Net проекте Visual C++ напрямую вызывать функции WinAPI. Юзай PInvoke: using namespace System::Runtime::InteropServices; [DllImport("user32")] extern "C" int MessageBoxA(void* hWnd, String^ pText, String^ pCaption, unsigned int uType); [STAThreadAttribute] int main(array<System::String ^> ^args) { String^ pText = "Hello PInvoke!"; String^ pCaption = "PInvoke Example"; MessageBoxA(0, pText, pCaption, 0); ... } |
Сообщ.
#14
,
|
|
|
1. В FAQ указано следующее: "C++/CLI проект, помимо стандартных библиотек, использует .NET Framework, в том числе и для работы с GUI". Исходя из этого я сделал, видимо, неправильный вывод, что можно взаимодействовать с библиотеками без PInvoke и точно также, как я делал в консольном и Win32 (RecordSoundWin) приложении, которое я сделал с помощью B.V. Взаимодействие с библиотеками через PInvoke возможно и в C#, однако это довольно муторно для большого количества функций в DLL. Видимо, совместить простоту работы с сторонними библиотеками консольного приложения и простоту создания интерфейса в NET проекте С++ невозможно. Очень жаль, если бы это удалось, то получился бы идеальный для меня вариант.
2. После прочтения FAQ и чтения ответов в этой ветке я склоняюсь к выбору технологии Dialog Templates (DT) для решения моей задачи. Подскажите, пожалуйста, где я могу найти хороший пример использования этой технологии? Работа с Win32 меня не пугает, постараюсь разобраться. |
Сообщ.
#15
,
|
|
|
MFC! С Новым Годом петуха!
|
Сообщ.
#16
,
|
|
|
Или посоветуйте какую-либо толковую книгу или статью по созданию приложений на DT
|
Сообщ.
#17
,
|
|
|
да какой еще DT
существует всего 3 варианта создания программ под Windows: Win32 API напрямую, юзать MFC и Windows Forms под .NET ВСЕ! пс. есть конечно еще кросплатформенные решения типа Qt и т.п |
Сообщ.
#18
,
|
|
|
Да не нравится мне MFC! Я пробовал программировать на нем, как-то все запутано и нелогично. А прочитав FAQ по графическому интерфейсу, убедился, что он не для меня. Там как-то все зарыто внутри, мне больше нравится, когда я понимаю код и то, что и как он делает. А в FAQ есть упоминание о DT
|
Сообщ.
#19
,
|
|
|
DT - dialog templates? это и есть MFC!
а студия сама идет с удобным редактором ресуров. нет конечно можешь найти левый редактор ресурсов и сляпать на нем шаблон диалога а потом юзать Win32 API так легче да? Цитата tuchin @ Да не нравится мне MFC! Я пробовал программировать на нем, как-то все запутано и нелогично. ой ой ой какие мы професианалы все там логично. MFC это чисто ОО надстройка над ВинАпи юзай тогда сишный Win32 API он логичнее |
Сообщ.
#20
,
|
|
|
Именно потому, что я не профессионал, MFC и показался очень сложным и запутанным. Подскажите, пожалуйста, тогда, как его правильно осваивать. С наскока у меня не получилось. Может быть есть толковые книги для начинающих? Попробую сделать вторую попытку, раз Вы так убеждены в его незаменимости.
|
Сообщ.
#21
,
|
|
|
Цитата tuchin @ Именно потому, что я не профессионал, MFC и показался очень сложным и запутанным. Подскажите, пожалуйста, тогда, как его правильно осваивать. С наскока у меня не получилось. Может быть есть толковые книги для начинающих? Попробую сделать вторую попытку, раз Вы так убеждены в его незаменимости. Лично я по книге "Программирование на Visual C++ 6.0" Д.Круглински, Уингоу, Шеферд осваивал MFC, есть более новая редакция этой книги для новых версий студии. Еще можно почитать "Visual C++ 2010. Полный курс" Айвор Хортон, но там половина книги идет обучение программированию С++ и С++/CLI, ее можно опустить по желанию, а я прочел , другая половина MFC, для начала думаю хватит. Не забываем гуглить, в инете есть много ресурсов по MFC. Цитата tuchin @ Подскажите, пожалуйста, тогда, как его правильно осваивать. С наскока у меня не получилось. не не с наскока MFC никак, надо последовательно и методично да еще есть библиотека WTL чисто для ГУЯ, она вроде проще MFC |
Сообщ.
#22
,
|
|
|
Цитата Cfon @ Ну совсем оптимистично существует всего 3 варианта создания программ под Windows: Win32 API напрямую, юзать MFC и Windows Forms под .NET ВСЕ! Как насчет VCL у Embarcadero? tuchin, некоторое время назад только они меня и выручили. Интерфейс сделал за несколько вечеров. Касательно лицензии, они раздают в последнее время свой билдер бесплатно с правом коммерческого использования (до $1000 годового оборота компании или лица) |
Сообщ.
#23
,
|
|
|
Цитата simsergey @ Ну совсем оптимистично Как насчет VCL у Embarcadero? не забыл он же на Visual C++, привел для нее варианты |
Сообщ.
#24
,
|
|
|
Цитата Cfon @ Неожиданно! А будет у вас какая-то ссылка для обоснования сего? Цитата simsergey @ он же на Visual C++Как насчет VCL у Embarcadero? |
Сообщ.
#25
,
|
|
|
Цитата Славян @ Неожиданно! А будет у вас какая-то ссылка для обоснования сего? Cfon пишет, что автор темы изначально интересовался Visual C++ Цитата tuchin @ Есть работающее консольное приложение на C++ (Visual Studio 2010), в котором идет обращение к функциям Windows API и сторонней DLL Он об этом пишет, а не о том, что Вы цитировали |
Сообщ.
#26
,
|
|
|
Хор, спасибо!
|
Сообщ.
#27
,
|
|
|
Цитата simsergey @ Cfon пишет, что автор темы изначально интересовался Visual C++ Цитата tuchin @ Есть работающее консольное приложение на C++ (Visual Studio 2010), в котором идет обращение к функциям Windows API и сторонней DLL Он об этом пишет, а не о том, что Вы цитировали именно так |
Сообщ.
#28
,
|
|
|
Цитата Cfon @ DT - dialog templates? это и есть MFC! Неверно |
Сообщ.
#29
,
|
|
|
Цитата B.V. @ Цитата Cfon @ DT - dialog templates? это и есть MFC! Неверно и что неверно? |
Сообщ.
#30
,
|
|
|
То утверждение, которое я процитировал.
|
Сообщ.
#31
,
|
|
|
объясни пожалуйста что такое DT?
|
Сообщ.
#32
,
|
|
|
мфц? да, помню в школе лет 15 назад всякие лайнс и прочие поделия лабал на нём... неужели на нем сегодня кто-нибудь что-нибудь серьёзное делает? как это ваще с кутэ можно сравнивать
|
Сообщ.
#33
,
|
|
|
Цитата Cfon @ объясни пожалуйста что такое DT? Шаблоны диалогов: https://msdn.microsoft.com/en-us/library/wi...p/ms632588.aspx |
Сообщ.
#34
,
|
|
|
Цитата _lcf_ @ А можно в двух словах (для тех кто в танке), в чем есть разница? как это ваще с кутэ можно сравнивать |
Сообщ.
#35
,
|
|
|
Цитата _lcf_ @ мфц? да, помню в школе лет 15 назад всякие лайнс и прочие поделия лабал на нём... неужели на нем сегодня кто-нибудь что-нибудь серьёзное делает? как это ваще с кутэ можно сравнивать в серьезных конторах программят на MFC Добавлено Цитата B.V. @ Цитата Cfon @ объясни пожалуйста что такое DT? Шаблоны диалогов: https://msdn.microsoft.com/en-us/library/wi...p/ms632588.aspx спс понял имеется ввиду программирование на чистом Win32 API. |
Сообщ.
#37
,
|
|
|
simsergey, кутэ это полноценный инструмент из коробки для разработки кроссплатформенных гуёвых приложений. многие телодвижения требующие десяти строк на сях, в кутэ запилены в одну, причем интуитивно понятную. например, qdatetime::currentdatetime.tostring("dd yyyy MMM hh:mm:ss.zzz"), покажите-ка сишный аналог хотя есть, естесно, холивары по поводу эффективности отдельных модулей, да лично у меня есть претензии к, например, qtcpsocket или qthread. однако ж никто не мешает особо тонким натурам юзать стд или буст. плюс кошерный механизм сигналов-слотов (сдохните кАлбэки). а мфц... всего лишь сишная либа для создания простейших гуёв. автоматом создающая такую голопомойную иерархию классов, что даже адекватным людям трудно понять, что куда пихать и что где ловить.
Цитата Cfon @ в серьезных конторах программят на MFC вы отстали от жизни лет на двадцать, подозреваю, что говоря "серьёзные конторы" имеются ввиду болота аля нии, где пропагандируют алгол, фортран, делфи и борланд |
Сообщ.
#38
,
|
|
|
А какие достоинсва-недостатки библиотеки? Она работает с VS2010? В описании нашел только VS2013 и 2015 |
Сообщ.
#39
,
|
|
|
Цитата _lcf_ @ simsergey, кутэ это полноценный инструмент из коробки для разработки кроссплатформенных гуёвых приложений. ... Нет сомнений - как и любой другой инструмент. Однако каждый может сделать поиск на своём компе по ключевым символам "QtGui". И тут выяснится, что приложения, основанные на QT есть, но не так уж и много. Logitech, Nokia - используют. Ещё чего-то там. "Partition Wizard". Использование этой библиотеки не ностит массового характера. При этом ни одной игрушки, основанной на QT, я не нашёл. |
Сообщ.
#40
,
|
|
|
Цитата _lcf_ @ Спасибо. Занятно, надо будет его почитать. simsergey, кутэ это полноценный инструмент из коробки для разработки кроссплатформенных гуёвых приложений. |
Сообщ.
#41
,
|
|
|
Цитата ЫукпШ @ И тут выяснится, что приложения, основанные на QT есть, но не так уж и много. кеды, опера, виртуалбокс, vlc. gparted, да, не густо. думаю, дело в том, что программы на кутэ в первую очередь ориентированные на конкретного заказчика, а не на обществееный рынок. для каждой задачи, как грится, свой инструмент. Цитата ЫукпШ @ При этом ни одной игрушки, основанной на QT, я не нашёл. а на чем основаны? простые игры на сях? сетевые - серверная на сях, клиентская на питоне, html, net? что-то мне подсказывает, что mfc там нету |
Сообщ.
#42
,
|
|
|
Цитата _lcf_ @ а на чем основаны? простые игры на сях? сетевые - серверная на сях, клиентская на питоне, html, net? что-то мне подсказывает, что mfc там нету А вот недавно был тут разговор - собрать движок STALKER-а. Так какие-то модули действительно на MFC. Подозреваю, вся (или почти вся) продукция Microsoft-a тоже. --- Не исключено, что для Linux Qt действительно используется чаще. |
Сообщ.
#43
,
|
|
|
Цитата tumanovalex @ А какие достоинсва-недостатки библиотеки? Из достоинств я бы выделил маленький размер и простоту использования. Цитата tumanovalex @ Она работает с VS2010? Похоже что нет. Это я лажанул, не разглядел в заголовке VS2010. Но ты попробуй, вдруг заработает. |
Сообщ.
#45
,
|
|
|
Цитата Cfon @ а WTL юзал? Не, не юзал. Но надо попробовать. |
Сообщ.
#46
,
|
|
|
Цитата ЫукпШ @ Так какие-то модули действительно на MFC. вангую, что это просто допотопное поделие, которое лень переписывать Цитата ЫукпШ @ Подозреваю, вся (или почти вся) продукция Microsoft-a тоже. ну они кагбэ сами эти либу запили соответственно и отношение к ней, как ко всему мелкомягкому |
Сообщ.
#47
,
|
|
|
Цитата _lcf_ @ Цитата ЫукпШ @ Подозреваю, вся (или почти вся) продукция Microsoft-a тоже. ну они кагбэ сами эти либу запили соответственно и отношение к ней, как ко всему мелкомягкому И ещё я подозреваю, что все разговоры о "сложности" GUI слегка преувеличены. Некоторые примитивные опыты и исследования показывают, что продукция Sysinternals (куплена Microsoft-ом) написана, скорее всего, "просто на С". При этом у этих приложений вполне приличные окошки, всё удобно и хорошо. (Не удивлюсь, если их автор вообще не использует возможности C++, хотя это и титаническая работа.) Посмотришь на приложения от Нокии - убогие они какие-то. Нет, не поможет им никакая Qt. |
Сообщ.
#48
,
|
|
|
Разумеется, что это во многом зависит от разработчика.
|
Сообщ.
#49
,
|
|
|
Попробовал Nana C++. Библиотека понравилась. Создал простое окно "Здравствуй, мир" очень быстро. Проверил быстроту реакции на вопросы в форуме на сайте библиотеки. Реакции никакой не последовало. А есть ли русскоязычный форум по этой библиотеке? Или англоязычный с быстрой реакцией (как например наш форум)
|
Сообщ.
#50
,
|
|
|
Цитата tumanovalex @ Сейчас посыпятся колкости... с быстрой реакцией (как например наш форум) |
Сообщ.
#51
,
|
|
|
Цитата tumanovalex @ Попробовал Nana C++. Библиотека понравилась. Создал простое окно "Здравствуй, мир" очень быстро. Вы пробовали для какой версии Visual Studio? Можете разместить проект? |
Сообщ.
#52
,
|
|
|
В разделе Кроссплатформенный С++ создал тему по NANA и дал ссылку на проект Visual Studio 2010. Использовал версию библиотеки nana 0.7.2.c++03.Ссылка на тему Nana C++ - кроссплатформенная библиотека на С++, ссылка на проект https://yadi.sk/d/q_2-yRL6379xUs. Ссылку на проект дал потому, что из-за библиотек LIB проект большой
|