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

时间:2011-04-18 06:46:10

标签: c# c++

我们有一个用c编写的库,由我们的主应用程序调用,用c#(V 3.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”的路径被修改为ExternalLibrary.exe的“TextFilePath \ TextFileName.txt”

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

此行为或任何解决方案的任何特定原因??

1 个答案:

答案 0 :(得分:1)

来自documentation

  

如果lpApplicationName为NULL,则为   第一个以空格分隔的白色标记   命令行指定模块   名称。 如果您使用的是长文件   包含空格的名称,使用引号   用于指示文件位置的字符串   名称结束,参数开始(参见   对此的解释   lpApplicationName参数)。如果   文件名不包含   扩展名,.exe被追加。   因此,如果文件名扩展名   是.com,此参数必须包含   .com扩展名。如果是文件名   在一段时间内结束(。)没有   扩展名,或者如果是文件名   包含路径,不附加.exe。   如果文件名不包含   目录路径,系统搜索   对于可执行文件   遵循顺序。

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