开发者

Using a command line program from within a C# application

I have written a C++ program (which executes from the command line), that works fine. Now I need to use it for my C# application. That is to say, I would like th开发者_StackOverflowe output from my C++ program to be used in my C# application whenever it is called.

Is it possible? If so, how?

Any links or help would be appreciated.


You can use System.Diagnostics.Process to fire up your C++ program and redirect its output to a stream for use in your C# application. The information in this question details the specifics:

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;


Make your C++ code DLL, and use pinvoke to call the C++ functions from C# code.

Read this article: Calling Win32 DLLs in C# with P/Invoke

Another way to do this is to use Process class from .Net. Using Process, you don't need to make your C++ code DLL; you can start your C++ EXE as a process from C# code.


You could have your C++ program write it's output to a file, and have your C# program read from the file.

If your application is very performance sensitive, then this is not the best way.

Here is the C# code to run the C++ program:

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

Now you are left to write to the file from your C++ program, and read from it in your C# program.

This will show you how to write to a file from your C++ program: http://www.cplusplus.com/doc/tutorial/files/

This will show you how to read from a file in your C# program: http://msdn.microsoft.com/en-us/library/ezwyzy7b.aspx


Since it seems the OP didn't leave any further comments, I am left wondering, would | not have sufficed? I guess it comes down to the object that is the "it" in "whenever it is called". If "it" refers to the C++ program, then Andy Mikula's answer is best. If "it" refers to the C# program, then I would suggest:

C:\>myCpluplus.exe | myCsharp.exe

and simply read from Console.In within myCsharp.exe.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜