【问题标题】:MIDL compilation error (and maybe idl file generation question)MIDL 编译错误(可能还有 idl 文件生成问题)
【发布时间】:2011-03-16 10:51:10
【问题描述】:

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

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

两个文件的导入指令不同,在 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”导入指令会删除编译错误,但这不是解决方案,因为 idl 是自动生成的。

我不确定为什么这两个 IDL 不同,以及添加导入指令的责任是什么;甚至如何修复 MIDL 编译错误。

有什么想法吗?

提前致谢。

最大。

【问题讨论】:

    标签: visual-studio-2010 mfc midl


    【解决方案1】:

    不见了

     #import "ocidl.idl"
    

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

    属性化编程有点错误,当它在 VS2008 中作为 ATL 项目向导的一个选项被删除时,它基本上被弃用了。为了长期维护您的代码库,请考虑将其删除。您可以使用自动生成的 .idl 作为开始。

    【讨论】:

      【解决方案2】:

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

      [idl_quote("import \"ocidl.idl\";")];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2012-08-13
        • 2013-09-26
        • 2014-05-19
        • 2017-06-21
        • 2010-11-19
        • 1970-01-01
        相关资源
        最近更新 更多