7

每次尝试编译使用 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?

4

3 回答 3

15

我解决了这个问题。

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

就我而言,原来在 C: 驱动器的根目录下有一个名为“Program”的文件,因此该文件的路径是“C:\Program”。我不知道是什么或为什么,但 MIDL.exe 对这个文件做了一些事情。我将文件重命名为“Program--MW”,MIDL2398 错误消失了。

如果其他人遇到 MIDL2398 错误,我建议您也使用 SysInternals 的 Process Monitor,为 Process Name 添加过滤器 -- Contains -- midl,运行编译器并检查 Process Monitor 日志中的错误和奇怪行为。它对我有用!

于 2012-11-13T23:57:50.383 回答
2

在 VS2012 上,midl 错误是由 com0com 安装程序引起的,它在 C 盘下创建了文件 Program。如前所述,这与 MIDL 混淆了。

文件 C:\Program 具有以下内容。只需将此文件重命名为其他名称,例如:C:__Program 即可让 Midl 感到高兴。

DIALOG: {
SetupOpenInfFile(C:\WINDOWS\system32\com0com.inf) on line 0
ERROR: 2 - The system cannot find the file specified.


} ... 
于 2016-07-11T23:56:22.573 回答
0

其他答案通常是正确的。具体来说,在我的情况下,该死文件的存在在文件夹层次结构中更靠后,这导致midl 失控。我在 Windows 环境中使用了Cygwin shell,下面是一个完整的完全可重播的问题屏幕投射视频,然后是解决方案。

https://asciinema.org/a/W2wEnv4y8nWHNWl5P3NIw8GnF

于 2018-12-13T13:37:46.833 回答