我们有一个用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”
我试过引用路径,但这没有帮助。
此行为或任何解决方案的任何特定原因??
答案 0 :(得分:1)
如果lpApplicationName为NULL,则为 第一个以空格分隔的白色标记 命令行指定模块 名称。 如果您使用的是长文件 包含空格的名称,使用引号 用于指示文件位置的字符串 名称结束,参数开始(参见 对此的解释 lpApplicationName参数)。如果 文件名不包含 扩展名,.exe被追加。 因此,如果文件名扩展名 是.com,此参数必须包含 .com扩展名。如果是文件名 在一段时间内结束(。)没有 扩展名,或者如果是文件名 包含路径,不附加.exe。 如果文件名不包含 目录路径,系统搜索 对于可执行文件 遵循顺序。
我知道你没有使用上面提到的参数,但这个技巧可能有所帮助。