C ++ или Python (возможно, еще) для создания графического интерфейса для консольного приложения на C - PullRequest
2 голосов
/ 24 июня 2010

У меня есть консольное приложение Visual C (созданное в VC ++ 2008EE), и мне нужно добавить GUI к нему.

Одна идея состояла в том, чтобы вызвать консольное приложение как подпроцесс и связаться с ним, используя stdin и stdout. Я пытался сделать это с помощью модуля подпроцесса Python - но он зашёл в тупик (возможно, потому что мое консольное приложение работает постоянно). Как я понял из http://www.python.org/dev/peps/pep-3145/, сейчас невозможно интегрировать непрерывно работающее консольное приложение с модулем подпроцесса python.

Другая идея (возможно, более прямолинейная) заключалась в добавлении формы в проект консольного приложения. Но когда я пытаюсь это сделать, VS связывает проект с «Общей поддержкой времени выполнения», что бы это ни значило: реклама формы, файл cpp для формы - и он больше не компилируется:

Command line error D8016 : '/MTd' and '/clr' command-line options are incompatible
error BK1506 : cannot open file '.\Debug\Form_TEST.sbr': No such file or directory

Понятия не имею, что это значит. Я никогда не имел дело с C ++, но некоторое время я использовал C и Python.

Что бы вы порекомендовали?

Ответы [ 2 ]

5 голосов
/ 24 июня 2010

Если у вас есть код для консольного приложения, не пытайтесь общаться с ним, используя потоки ввода и вывода.Извлеките логику вашего консольного приложения в библиотеку и вызывайте эту библиотеку из GUI по вашему выбору - либо Windows.Forms из C #, Python GTK, обычный GTK.

1 голос
/ 24 июня 2010

Причина, по которой VS превращает ваше приложение в тип CLR, заключается в том, что он случайно думает, что вы хотите использовать winforms, являющиеся частью .NET Framework, и единственный способ использовать их, если ваш проект также является .NET. 1001 *

У вас есть другие варианты: 1. Добавить MFC GUI - родной C ++ GUI 2. еще лучше создайте новый проект .NET (C # / VB.NET) с графическим интерфейсом desirect и вызовите свою C / C ++ dll с помощью P-Invoke или COM-взаимодействия

...