Мультипроектное решение VS2010 - консольное и формовое приложение - PullRequest
0 голосов
/ 12 марта 2012

У меня есть проект решения VS2005, который состоит из двух зависимых проектов. Этот проект представляет собой консольное приложение C, которое связывается с устройством и получает от него некоторые выходные данные. Этот проект - старый проект, и он не написан мной. Я инженер-электротехник и в основном использую язык Си для проектов. Я не так много знаю о C ++ и C #. В течение некоторого времени я имею дело с приложениями формы VS2010 и c ++. Я понимаю основы, но у меня есть некоторые проблемы. Я хочу добавить графический интерфейс для этого консольного проекта. Для этого я разработал форму заявки. У меня есть кнопки для запуска процесса в консольном приложении и RichTextbox для вывода.

Я должен вызвать функцию внутри консольного проекта из приложения winform, нажав кнопку. Я хочу вызвать эту функцию в цикле для непрерывного чтения.

Я попытался вызвать файл "console.exe" и запустить его в своем проекте winform и перенаправить вывод в richtextbox, но это было слишком медленно для моих проектов. Я должен выполнять непрерывное быстрое чтение с моего устройства.

Каков наилучший способ сделать это? Я хочу преобразовать мое консольное приложение C в приложение Windows Form.

Спасибо.

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Вы не можете вызвать функцию внутри EXE непосредственно из другого EXE.

У вас есть несколько вариантов здесь, в зависимости от того, сколько работы вы готовы сделать и каковы долгосрочные цели вашего старого проекта.

  1. Просто скопируйтесоответствующий код из вашего консольного проекта в ваш проект форм;это лучше всего работает, если ваш консольный проект устарел, и вы больше не планируете его поддерживать.

  2. Переместите соответствующий код из консольного проекта в библиотечный (DLL) проект и создайте ссылкукак из вашей консоли, так и из формы приложения;это работает, если код вашего консольного проекта относительно изолирован (например, у вас мало глобальных переменных и т. д.)

  3. Добавьте какой-нибудь механизм IPC в консольный проект (прослушивание сокета TCP или именованного канала и т. д.), к которому вы можете подключиться из своего проекта форм и получить данные напрямую;это настолько близко, насколько вы можете достичь своей первоначальной цели «вызвать функцию в одном EXE из другого EXE», но это значительно больше работы.

0 голосов
/ 12 марта 2012

Обычно вы перемещаете или конвертируете существующую логику из консольного приложения в проект библиотеки классов. Затем вы должны включить ссылку на эту библиотеку классов в свой проект форм. Затем в вашем проекте форм вы вызываете методы вашей библиотеки (например, когда вы нажимаете кнопку) из другого потока, чтобы не блокировать ваш поток пользовательского интерфейса. ATTN! При обновлении RichTextBox с результатами вам придется вызывать метод Invoke для выполнения операции с несколькими потоками (см. здесь для связанной темы).

0 голосов
/ 12 марта 2012

Поскольку C является подмножеством C ++, вы должны иметь возможность скомпилировать исходный код C из программы CLR в свой проект C ++, используя его как библиотеку, которую вы можете вызывать непосредственно из вашего графического интерфейса. Проверьте этот вопрос, чтобы узнать, как начать это делать .

Вы должны быть в состоянии использовать код C почти точно так же, как он использовался ранее, хотя он, скорее всего, потребует некоторой настройки, Вот еще один связанный вопрос переполнения стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...