我正在尝试用midl编译我的arith.idl文件。我正在运行Windows 7专业版。
以下是我在powershell提示符中启动的命令:
PS> 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\midl.exe' .\arith.idl
Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555
Copyright (c) Microsoft Corporation. All rights reserved.
64 bit Processing .\arith.idl
midl : command line error MIDL1005 : cannot find C preprocessor cl.exe
PS>
我在Windows RPC编程方面相当不错,我非常感谢一些帮助。我已阅读this但这并未解决任何问题(相同的症状)。我也尝试使用此命令指定预处理程序cl.exe:
PS C:\> & 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\midl.exe' /cpp_cmd 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.exe' C:\Users\$e\Desktop\MIDL\arith.idl
Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555
Copyright (c) Microsoft Corporation. All rights reserved.
Processing C:\Users\philippe.CHIBOLLO\Desktop\MIDL\arith.idl
PS C:\>
此命令不返回任何内容和
echo $?
返回False
编辑:
执行vcvarsall.bat文件不会改变任何内容。这是我发布的powershell命令的输出:
PS C:\> & 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat'
Setting environment for using Microsoft Visual Studio 2010 x86 tools.
PS C:\> & 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\midl.exe' /cpp_cmd 'C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cl.exe' C:\Users\$me\Desktop\MIDL\arith.idl
Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555
Copyright (c) Microsoft Corporation. All rights reserved.
Processing C:\Users\$me\Desktop\MIDL\arith.idl
PS C:\> echo $?
False
PS C:\>
答案 0 :(得分:4)
我不久前写了一篇关于此的文章。从PowerShell运行Cmd.exe shell脚本(批处理文件)时,环境变量更改不会传播到父进程(PowerShell)。要解决此问题,您需要在shell脚本完成后捕获环境变量更改。这篇文章是这样的:
Windows IT Pro: Take Charge of Environment Variables in PowerShell
您可以使用该文章中的Invoke-CmdScript函数运行vcvarsall.bat
并将其环境变量更改传播到PowerShell。
Invoke-CmdScript如下所示:
function Invoke-CmdScript {
param(
[String] $scriptName
)
$cmdLine = """$scriptName"" $args & set"
& $Env:SystemRoot\system32\cmd.exe /c $cmdLine |
select-string '^([^=]*)=(.*)$' | foreach-object {
$varName = $_.Matches[0].Groups[1].Value
$varValue = $_.Matches[0].Groups[2].Value
set-item Env:$varName $varValue
}
}
如果要在PowerShell脚本中本地化环境变量更改,还可以使用该文章中的Get-Environment和Restore-Environment函数。