背景信息:Windows 7,Visual C++ 2010 Express
问题:CreateProcess() 返回“无效的命令行参数”
解释:我正在编写一段代码,使用 Windows API 的 CreateProcess 调用外部程序。到目前为止,我已经成功调用了一个外部程序:
if( !CreateProcess( "C:\\Temp\\convert.exe",
t_str, // Arguments
...
}
//where t_str is " C:\\img1.jpeg C:\\img1.pgm" (ImageMagick if you're wondering).
即使我对数据进行了大量的处理,将所有内容推入Windows字符串和指针中,它仍然可以完美地工作。因此,我复制了所有用于CreateProcess()的混淆,以便调用另一个外部程序:
if( !CreateProcess( "C:\\Temp\\sift.exe",
t_str2, // Arguments
...
}
//where t_str2 is ` < C:\\img1.pgm > C:\\img1.key`
基本上,两个调用非常相似,但是所有变量名都已更改(因为我正在串行运行这两个调用)。这就是问题所在:它不工作,而是打印出“无效的命令行参数:< C:\img1.pgm”。当然,这个命令在命令提示符中很好用,但在我的代码中却不好使。
我将t_str2换成了一些不那么复杂的东西(因为我知道sift.exe是如何工作的),结果还是一样。当我只运行sift而不是convert时也发生同样的事情。
问题是什么导致的?我该如何进一步排除这个问题?对于我使用的方法,有什么替代方案建议吗?任何帮助都将不胜感激。我可以提供更多代码,但它非常简单,不太可能出错。
/c c:\temp\sift.exe < c:\img1.pmg > c:\img1.key
运行命令cmd.exe
,会怎样呢? - Aleks G