midl : error MIDL2398 : cannot execute MIDL engine

和这个作者的经历一模一样。就转了。在C盘下真的有一个Program的文件,不知道怎么回事情。



今天vs2010编译,莫名其妙的出现“midl : error MIDL2398 : cannot execute MIDL engine”的错误。查了整整一个晚上,发现居然是个相当蛋疼的bug。

为了帮助未来同样苦逼的你迅速解决问题,我先把解决方案说下。如果这个方案还是无法解决问题,请接着往下看我的悲惨遭遇,没准能给你一些启发。

解决方案:

  • 请首先确定你所运行的midl.exe的路径,如果你也跟我一样是vs2010的问题并且没有安装过任何的windows SDK,那么这个midl.exe应该位于这个路径:

C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\midl.exe

  • 确定好路径后,从左到右扫描它。只要发现一个空格,就去检查此空格前所有字符形成的路径名是否是一已存在的文件(如路径如上所示,则需要检查 “C:\Program” 及 “C:\Program Files\Microsoft”是否分别是一已存在的文件),如果任一文件存在,且不为目录(即文件夹),则移除之。
  • 如果上步骤有文件被移除,那么这个问题就已经解决了。

下面讲讲老汉苦逼的遭遇,以免对不起前来看热闹的观众。


下午想了点东西,晚上吃饭回来准备验证一下,在vs2010中将代码写完,编译起来,就发现这个苦逼的提示。

1>Build started 2012/1/3 18:51:37.
1>midl : error MIDL2398: cannot execute MIDL engine

照例祭起Google大旗,很顺利的搜到msdn社区的这个帖子。帖子描述的症状跟我相同,下面有人提到重装vs2010搞定,本着赶快搞定,不走冤枉路的原则,我便重装了一遍vs2010 + sp1 (cry ,历时两三个小时。结果重装完还是老样子,吐血不止。。看来这事还得靠自己。

先找midl.exe是否有verbose之类的flag,无果。

然后去找midl.exe是否在哪里写了log。懒得自己去找,于是开了Procmon。设定好过滤器,重新编译,顺利地在临时文件夹里发现了log。log里是这样写的(略有精简):

Build started 2012/1/3 22:08:37.
1>Project “E:\code\t.vcxproj” on node 2 (build target(s)).
1>Midl:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\midl.exe /t.idl
1>midl : error MIDL2398: cannot execute MIDL engine
1>Done Building Project “E:\code\test\t.vcxproj” (build target(s)) — FAILED.
Build FAILED.

好!看到原始命令行输出了。将midl.exe那一行命令贴到cmd下,果然也出现了错误:

C:\>”C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\midl.exe” t.idl
midl : error MIDL2398 : cannot execute MIDL engine

这么多年被Windows蹂躏的直觉告诉我,是那个长长的路径搞的鬼。因为帖子都说了,这个错误是midl.exe找不到midlc.exe导致的,八成是空格什么的导致搜索路径乱掉了。于是我尝试在vs2010环境下执行不带全路径的midl.exe,果然不一样:

E:\big\Microsoft Visual Studio 10.0\VC>midl.exe t.idl
midl : command line error MIDL1001 : cannot open input file t.idl

提示了找不到文件,这正说明了midl.exe已经能够正常运转了。看来确实是搜索路径的问题。

接下来就是看看到底是搜到哪里去了,还是要倚仗于ProcMon的帮忙。对比上下两次编译,很快发现了问题:

全路径调用midl.exe时,midl.exe搜索midlc.exe,会尝试去搜索C:\Program目录(如图),结果搜出来是个文件(我也不知道到底是哪个脚本无聊创建了这么一个文件)。于是搜索过程就结束了。程序认为没有找到midlc.exe,就报了错。

midl搜索了错误路径

知道原因了,解决方法就很简单了:把C:\Program这个蛋疼的文件删掉就好了。

这么蛋疼的一件事情搞了整整一个晚上,天杀的!你究竟要闹哪样嘛,这里还一堆事情没干完呢啊~~~~

PS:回到家我又试了试vs2005/2008下的midl,发现竟然都有这个问题!这难道是Windows搜索路径的标准策略?我没记得有这么回事啊,再说这怎么这么像个bug啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值