0

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

编辑:谢谢马修,我让它工作了。

与我的 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);
    }
}
4

1 回答 1

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

于 2013-06-05T15:27:00.207 回答