当从c#调用外部dll时,从命令行参数中删除空格

本文关键字:参数 命令行 删除 空格 调用 外部 dll 当从 | 更新日期: 2023-09-27 17:50:21

我们有一个用c编写的库,它被用c# (v3.5)编写的主应用程序调用。
我们的c#应用程序的上一个版本是在Delphi中使用的,那个版本也使用了相同的库。

使用模式如下:

我们在c#代码中使用DLLImport加载库并调用所需的函数。该函数使用位于库文件夹中的外部dll创建进程,并传递将由外部dll处理的文本文件的路径。

问题是,当这个过程是通过Delphi应用程序完成时,一切都很好。但是,现在所有的空格都从文本文件的路径中删除,这会导致外部dll中的"文件未找到"错误。

c文件中的代码:

`Some Work  
  // This routine executes the process  
  if (!CreateProcess (NULL,                 // No module name (use command line).    
                      ProcessCommandLine, // Command line to execute, format : LibraryFolderPath'ExternalLibrary.exe Text File Path'TextFileName.txt  
                      NULL,               //   
                      NULL,               // Thread handle not inheritable.  
                      FALSE,              // Set handle inheritance to FALSE.  
                      0,                  // No creation flags.  
                      NULL,               // Use parent's environment block.  
                      DirPath,            // Use parent's starting directory.  
                      &StartupInfo,       // Pointer to STARTUPINFO structure.  
                      &ProcessInfo )      // Pointer to PROCESS_INFORMATION structure.  
    )
  {
    // if fails to start application return to caller
    return;
  } // if !CreateProcess 

指定的路径"文本文件路径'TextFileName.txt"被修改为"TextFilePath'TextFileName.txt"对于ExternalLibrary.exe

我试着引用路径,但没有帮助。

这种行为的具体原因或解决方案??

当从c#调用外部dll时,从命令行参数中删除空格

来自文档:

如果lpApplicationName为NULL的第一个以空格分隔的标记命令行指定模块名字如果使用的是长文件包含空格的名称,请使用引号字符串,用于指示文件的位置名称结束,参数开始(参见的解释lpApplicationName参数)。/blockquote>

我知道你没有使用上面提到的参数,但是这个技巧可能会有所帮助。