如何在c ++和c#之间进行交互?

时间:2017-02-15 23:45:30

标签: c# c++ interop com-interop

C ++ MFC应用程序" caller.exe"调用一个独立的控制台c ++应用程序" target.exe"

" taget.exe"的入口点签名在c ++中看起来像这样

int APIENTRY WinMain(HINSTANCE hInstance,
                 HINSTANCE hPrevInstance,
                 LPSTR     lpCmdLine,
                 int       nCmdShow)
{
      CString cmdLine = lpCmdLine;
      ...
}

和" lpCmdLine"中的移交参数。

我想重写" target.exe"在C#中的应用。但我不知道如何访问lpCmdLine。

我试过

    public static void Main(string[] Args)
    {
        try{
            foreach(string arg in Environment.GetCommandLineArgs()) // Args doesnt work either
            {
                Console.WriteLine(arg);
                File.AppendAllText("log.txt",arg);
            }

            Console.WriteLine(string.Format("{0}",Environment.GetCommandLineArgs().Length));

            Console.ReadLine();
        }
        catch ( Exception e){
            throw e;
        }

没有运气。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

Args已经是一个字符串数组,对于在命令行上传递的每个参数都有一个。因此,您可以简单地遍历Args数组。试试这个简单的程序:

using System;

public class ArgTester
{
    static int Main(string[] args)
    {
        Console.WriteLine("Got {0} arguments", args.Length);

        foreach (string arg in args) {
            Console.WriteLine("{0}", arg);
        }

        return 0;
    }
}

答案 1 :(得分:0)

最初我想创建一个应用程序,将mfc应用程序(发送者)的参数放到我的c#应用程序(目标),而不使用文件系统上的文件。

我决定使用命名管道在c ++中实现我想要做的事情。比得到上面提到的答案容易得多。

我为c ++客户端使用了this文章,为c#服务器使用了this