Использование программы командной строки из приложения C # - PullRequest
4 голосов
/ 26 января 2011

Я написал программу на C ++ (которая выполняется из командной строки), которая отлично работает.Теперь мне нужно использовать его для моего приложения C #.То есть я хотел бы, чтобы вывод моей программы на C ++ использовался в моем приложении на C # всякий раз, когда он вызывался.Если да, то как?

Буду признателен за любые ссылки или помощь.

Ответы [ 4 ]

9 голосов
/ 26 января 2011

Вы можете использовать System.Diagnostics.Process для запуска вашей программы на C ++ и перенаправления ее вывода в поток для использования в вашем приложении на C #. Информация в этом вопросе уточняет детали:

string command = "arg1 arg2 arg3"; // command line args
string exec = "filename.exe";      // executable name
string retMessage = String.Empty;
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();

startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;

startInfo.UseShellExecute = false;
startInfo.Arguments = command;
startInfo.FileName = exec;

p.StartInfo = startInfo;
p.Start();

using (StreamReader output = p.StandardOutput)
{
    retMessage = output.ReadToEnd();
}

p.WaitForExit();

return retMessage;
1 голос
/ 26 января 2011

Вы могли бы заставить свою программу C ++ записать ее вывод в файл, а вашу программу C # прочитать из файла.

Если ваше приложение очень чувствительно к производительности, то это не лучший способ.

Вот код C # для запуска программы C ++:

        try
        {
            Process p = StartProcess(ExecutableFileName);
            p.Start();
            p.WaitForExit();
        }
        catch
        {
            Log("The program failed to execute.");
        }

Теперь вам осталось записать файл из вашей программы C ++ и прочитать его в вашей программе C #.

Это покажет вам, как записать файл из вашей программы на C ++: http://www.cplusplus.com/doc/tutorial/files/

Это покажет вам, как прочитать файл из вашей программы на C #: http://msdn.microsoft.com/en-us/library/ezwyzy7b.aspx

1 голос
/ 26 января 2011

Создайте свою DLL-библиотеку кода C ++ и используйте pinvoke для вызова функций C ++ из кода C #.

Прочитайте эту статью: Вызов Win32 DLL в C # с помощью P / Invoke

Еще один способ сделать это - использовать класс Process из .Net.Используя Process, вам не нужно создавать свою DLL-библиотеку кода C ++;вы можете запустить ваш C ++ EXE как процесс из кода C #.

0 голосов
/ 05 сентября 2016

Так как кажется, что ОП не оставлял никаких дальнейших комментариев, я задаюсь вопросом, будет ли | не хватило? Я предполагаю, что это сводится к объекту, который является "it" в " всякий раз, когда он называется ". Если «это» относится к программе на C ++, то ответ Энди Микулы - лучший. Если «это» относится к программе на C #, то я бы предложил:

C:\>myCpluplus.exe | myCsharp.exe

и просто читайте из Console.In в myCsharp.exe.

...