【问题标题】:Launch a C# Application from C++ and performing a task on that application从 C++ 启动 C# 应用程序并在该应用程序上执行任务
【发布时间】:2013-06-01 09:06:44
【问题描述】:

我已阅读this 并实现了我的 C# 应用程序的打开。我的 C# 应用程序打开一个文件夹并绘制一个图表。我是否可以告诉我的 C# 应用程序从 C++ 打开哪个文件夹,然后一旦看到图形并关闭 C# 程序,它就会返回到 C++ 应用程序。

编辑:谢谢 Matthew,我搞定了。

关于我的 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);
    }
}

【问题讨论】:

    标签: c# c++ mfc launch


    【解决方案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

    【讨论】:

    • Awesome.. 我已经完成了 C# 实现,只是不知道 C++ 实现。另外,我不确定某人的反对票:(
    • @TheNewbie 我不确定是否有反对票;这个问题似乎很清楚。
    • 嗨 Matthew.. 很抱歉再次打扰.. 但请您看看我更新的问题,让我知道为什么文件名没有被正确复制?由于它与同一个问题有关,我想我会在它下面发帖。
    • @TheNewbie 查看 CreateProcess() 的帮助。您需要传递一个虚拟的第一个字符串(通常是程序名称),然后是程序参数,如果它们包含空格,则用引号括起来,如下所示:DummyFirstArg "Path Name With Spaces"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    相关资源
    最近更新 更多