Вызовите CreateProcess () и получите возвращаемое значение строки - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть приложение C ++, которое вызывает EXE-файл, написанный на C#, который захватывает некоторую информацию, и я хочу передать ее обратно в виде строки вызывающему приложению C ++.

Так что мой вопрос: " Можно ли получить возвращаемое значение строковых данных из EXE-файла, вызываемого с помощью CreateProcess ()?

Надеюсь, я не нарушил этикета "вопроса" здесь.

Ответы [ 3 ]

2 голосов
/ 18 февраля 2020

Если приложение C# выводит свои данные в STDOUT или STDERR, приложение C ++ может перехватить их, перенаправив STDOUT / STDERR при вызове CreateProcess(). Подробности см. В Создание дочернего процесса с перенаправленным вводом и выводом в MSDN.

1 голос
/ 18 февраля 2020

Не волнуйтесь, Джефф, да, есть способ передать данные от одного к другому через EXE.

Что вы захотите сделать, это записать выходные данные в приложении C# в стандартный вывод.

Console.WriteLine("Your message here.");

В основном, если вы запускаете консольное приложение C# и оно печатает данные в на экране все эти данные могут быть прочитаны в вашем приложении C ++.

В вашей программе C ++ вы захотите читать со стандартного ввода.

Это может выглядеть примерно так:

#include <iostream>
#include <string>

int main() {
    // Your code to run the application in a background process

    for (std::string line; std::getline(std::cin, line);) {
        std::cout << line << std::endl;
    }

    return 0;
}

Единственное правило, которое вы нарушили, не предоставляло достаточно деталей или кода, чтобы получить более подробные c сведения о решении. Но если вам нужна дополнительная помощь, просто предоставьте больше деталей. Удачного кодирования!

Вот ссылка на дополнительную информацию о коде c#, если он вам нужен: https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.standardoutput

0 голосов
/ 18 февраля 2020

Я не вижу, как другой процесс может вернуть строку. Процессы ничего не возвращают, они просто запускаются.

Вы можете ссылаться (или ссылаться) на некоторые DLL или EXE и затем вызывать метод, возвращающий строку. Но это будет выполняться внутри вашего собственного процесса и не запустит другой.

См .: Вызов C#. NET методов из неуправляемого кода C / C ++ (CodeProject).

...