Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 MIDL编译错误(可能还有idl文件生成问题)_Visual Studio 2010_Mfc_Midl - Fatal编程技术网

Visual studio 2010 MIDL编译错误(可能还有idl文件生成问题)

Visual studio 2010 MIDL编译错误(可能还有idl文件生成问题),visual-studio-2010,mfc,midl,Visual Studio 2010,Mfc,Midl,我们正在考虑将应用程序从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)\Micros

我们正在考虑将应用程序从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 import指令将删除编译错误,但这不是解决方案,因为idl是自动生成的

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

有什么想法吗

提前谢谢

最大值

缺失

 #import "ocidl.idl"
您可以通过在代码中使用[ImportId]属性来修复它

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

它丢失了

 #import "ocidl.idl"
您可以通过在代码中使用[ImportId]属性来修复它

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

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

[idl_quote("import \"ocidl.idl\";")];
也许我使用的[importId]属性是错误的,但我无法得到Hans的答案来解决这个问题。但修复工作奏效了。只需将其添加到stdafx.h文件的顶部:

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