2012-11-02 34 views
5

每次尝试编译使用COM的Visual C++(Visual Studio 2010)项目时,都会看到MIDL2398错误。该项目在我的Windows 7开发人员计算机和Windows Server 2008构建计算机上构建得非常好,但不在Windows Server 2012构建计算机上构建。在Windows 2012上使用Visual Studio 2010创建MIDL2398错误

,我发现这个网站有关的各种MIDL编译器错误:http://blog.yezhucn.com/midl/compiler_errors.htm

但是,我想它的建议对于MIDL2398,我验证了“midlc.exe”是在同一目录“MIDL.EXE”和这两个版本都是相同的版本(都是Windows SDK v7.1中的文件版本:7.0.555.1产品版本:6.1.7600.16385)。

我猜它与Windows Server 2012有关,但我不知道。

有没有人能够获得Windows SDK v7.1 MIDL编译器在Windows Server 2012上工作?或者,有谁知道还有什么可能导致MIDL2398?

+0

从Visual Studio 2010命令提示符中,键入“where midl * .exe”,并验证是否仅找到这两个文件。 SysInternals的ProcMon是验证是否使用了正确的EXE文件的另一种方法。 –

+0

我在为我正在构建的项目的预构建事件中执行了该操作,并且该命令为我提供了Windows SDK v7.1 midl EXE的路径,这正是我所期望的。我还更改了项目设置以尝试使用Windows SDK v7.0A(包含在Visual Studio 2010中),where命令正确报告了v7.0A版本的midl EXE的路径,但我仍然得到相同的midl错误我是否针对Windows SDK v7.0A或v7.1进行编译。同一台Windows 2012虚拟机上的同事尝试使用Windows SDK版本8进行编译,但也失败了。 – MikeW

回答

9

我想出了问题。

我在生成服务器上安装了SysInternals套件(http://technet.microsoft.com/en-US/sysinternals),然后使用进程监视器(procmon)来查看MIDL.exe正在尝试和未执行的操作。

就我而言,事实证明,在名为“Program”的C:驱动器的根目录中存在一个文件,因此该文件的路径为“C:\ Program”。我不知道什么或为什么,但MIDL.exe正在做这个文件。我将该文件重命名为“Program - MW”,并且MIDL2398错误消失。

如果有其他人遇到MIDL2398错误,我建议您还使用SysInternals的进程监视器,为进程名添加过滤器 - 包含midl,运行您的编译器并检查进程监视器日志以查找错误和奇怪行为。它为我工作!

+1

我有完全相同的问题,谢谢!不知道该名称程序如何到达那里 – deltanine

+1

我看到你[报告connect.microsoft.com上的错误](https://connect.microsoft.com/VisualStudio/feedback/details/771055/midl-compiler-fails -with-midl2398-错误时-A-文件存在-AT-C-程序)。虽然该报告在2012年关闭,但我可以确认问题在Visual Studio 2013 update 5中仍然存在。在我的情况下,文件'C:\ Program'是由我们的内部实用程序之一创建的,无法使用空格处理路径 - 它将'C:\ Program Files \ ...'截断为'C:\ Program',然后愉快地将东西写入该文件。 – herzbube

1

在VS2012上,midl错误是由com0com安装程序造成的,它在C驱动器下创建了Program文件。如前所述,这与MIDL相混淆。

文件C:\ Program具有以下内容。只需将该文件重命名为其他内容,例如:C:__ Program让Midl感到高兴。在线0 ERROR

DIALOG::{ SetupOpenInfFile(\窗口\ system32 \ com0com.inf C):2 - 系统无法找到指定的文件。

} ...

相关问题