MIDL编译错误(也许是idl文件生成问题)

时间:2010-07-15 14:29:11

标签: visual-studio-2010 mfc midl

我们正在考虑将我们的应用程序从VS2008移至VS2010。

我们使用“属性编程”生成一些COM对象,并自动生成IDL。

两个文件的import指令不同,VS2010上的编译失败。

在VS2008上,它会生成如下内容:

import "docobj.idl";

在VS 2010上

import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\exdisp.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\shldisp.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\prsht.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\mshtmhst.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\mshtml.idl";
import "c:\program files (x86)\microsoft sdks\windows\v7.0a\include\dimm.idl";
import "c:\program files (x86)\microsoft sdks\windows\v7.0a\include\dispex.idl";

在VS2010上编译IDL时会产生以下错误

20>  Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555 
20>  Copyright (c) Microsoft Corporation. All rights reserved.
20>  Processing .\_my_idl.idl
20>  _my_idl.idl
20>  Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl
20>  wincrypt.idl
20>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl(47): error MIDL2025: syntax error : expecting a type specification or a storage specifer or a type qualifier near "WCHAR"
20>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl(47): error MIDL2026: cannot recover from earlier syntax errors; aborting compilation
20>LINK : fatal error LNK1240: failed to compile IDL content

手动删除“wincrypt.idl”import指令会删除编译错误,但这不是解决方案,因为idl是自动生成的。

我不确定为什么两个IDL不同以及负责添加import指令的原因;甚至如何解决MIDL编译错误。

有什么想法吗?

提前致谢。

最大

2 个答案:

答案 0 :(得分:3)

缺少

 #import "ocidl.idl"

您可以使用代码中的[importidl]属性来修复它。

归因编程是一个错误,当它作为VS2008中ATL项目向导的选项被删除时,基本上已被弃用。对于代码库的长期维护,请考虑将其删除。您可以使用自动生成的.idl作为启动它的方法。

答案 1 :(得分:1)

也许我使用了[importidl]属性错误,但我无法让汉斯回答解决这个问题。但修复here有效。只需将其添加到stdafx.h文件的顶部:

[idl_quote("import \"ocidl.idl\";")];
相关问题