每次尝试编译使用COM的Visual C ++(Visual Studio 2010)项目时,我都会看到MIDL2398错误。这个项目在我的Windows 7开发人员计算机和Windows Server 2008构建计算机上构建得非常好,但在Windows Server 2012构建计算机上却没有。
我在这个网站上找到了各种MIDL编译器错误:http://blog.yezhucn.com/midl/compiler_errors.htm
但是,我尝试了它对MIDL2398的建议,我确认“midlc.exe”与“midl.exe”在同一目录中并且两者都是相同的版本(两者都是文件版本:7.0.555.1产品版本: 6.1.7600.16385,来自Windows SDK v7.1)。
我猜它与Windows Server 2012有关,但我不知道。
是否有人能够使Windows SDK v7.1 MIDL编译器在Windows Server 2012上运行?或者,是否有人知道可能导致MIDL2398的其他原因?
答案 0 :(得分:12)
我发现了问题。
我在构建服务器上安装了SysInternals套件(http://technet.microsoft.com/en-US/sysinternals),然后使用Process Monitor(procmon)查看MIDL.exe正在尝试和未执行的操作。
就我而言,事实证明在C:驱动器的根目录下有一个名为“Program”的文件,因此该文件的路径是“C:\ Program”。我不知道是什么或为什么,但是MIDL.exe正在对这个文件做些什么。我将文件重命名为“Program - MW”,MIDL2398错误消失了。
如果有其他人遇到MIDL2398错误,我建议您也使用SysInternals的Process Monitor,为Process Name添加一个过滤器 - Contains - midl,运行编译器并检查Process Monitor日志中的错误和奇怪的行为。它对我有用!
答案 1 :(得分:2)
在VS2012上,midl错误是由com0com安装程序引起的,该安装程序在C驱动器下创建了文件Program。如前所述,这正在搞乱MIDL。
文件C:\ Program具有以下内容。只需将此文件重命名为其他内容,例如:C:__程序使Midl满意。
DIALOG: {
SetupOpenInfFile(C:\WINDOWS\system32\com0com.inf) on line 0
ERROR: 2 - The system cannot find the file specified.
} ...
答案 2 :(得分:0)
其他答案通常是正确的。具体地说,就我的情况而言,该 damn 文件的存在在文件夹层次结构中进一步下降,这导致 midl 陷入困境。我在Windows环境中使用了 Cygwin 外壳,下面是该问题以及解决方案的完整的可完全重播的屏幕投射视频。