Запустите приложение C # из C ++ и выполните задачу в этом приложении.

c# c++ mfc launch

491 просмотра

1 ответ

Я прочитал это и добился открытия моего приложения на C #. Мое приложение C # открывает папку и рисует график. Могу ли я сообщить моему приложению C #, какую папку открывать из C ++, а затем, как только граф увиден и программа C # закрыта, он возвращается обратно в приложение C ++.

Редактировать: Спасибо Мэтью, я получил это работает.

Еще один запрос относительно моей переменной CreateProcess lpCommandLine: (ниже приведен код)

CString sFolderPath = "C:\Documents and Settings\...";
      int nStrBuffer = sFolderPath.GetLength() + 50;
      LPTSTR szParam = _tcsdup(sFolderPath.GetBuffer(nStrBuffer));

  nRet = ::CreateProcess(szCmdline,// pointer to name of executable module 
  szParam,// pointer to command line string
  NULL,// pointer to process security attributes 
  NULL,// pointer to thread security attributes 
  FALSE,// handle inheritance flag 
  DETACHED_PROCESS,// creation flags 
  NULL,// pointer to new environment block 
  NULL,// pointer to current directory name 
  &sui,// pointer to STARTUPINFO 
  &pi );// pointer to PROCESS_INFORMATION

Я правильно получаю переменную szParam, но когда приложение открывается, полное имя файла не копируется. Например: в приведенном выше случае только "and Settings ...." копируется туда, где часть "C: \ Documents" осталась позади. Не могли бы вы указать на мою ошибку, пожалуйста?

Реализация C #:

[STAThread]
static void Main(string[] args)
{
    foreach (string result in args)
    {
        MessageBox.Show(result);
    }
}
Автор: Neophile Источник Размещён: 12.11.2019 09:15

Ответы (1)


1 плюс

Решение

Это конечно возможно.

В C ++ CreateProcess()есть параметр с именем lpCommandLine.

Что вам нужно сделать в C ++ - это передать в lpCommandLineвиде строки имя папки, которую вы хотите открыть. Вам нужно будет заключить строку в двойные кавычки, если путь к папке содержит пробелы.

Внутри вашей программы на C # у вас будет static void Main(string[] args). argsПараметр будет содержать имя папки , которые вы перешли из программы на C ++ , так что вы можете действовать на него соответствующим образом .

Чтобы программа на C ++ ожидала завершения работы программы на C #, ее нужно использовать WaitForSingleObject()для ожидания выхода из нее, используя дескриптор процесса, возвращенный из CreateProcess().

Это описано здесь: http://www.codeproject.com/Tips/333559/CreateProcess-and-wait-for-result

Автор: Matthew Watson Размещён: 05.06.2013 03:27
Вопросы из категории :
32x32