如何解决在Visual Studio 2019中编译ATL项目时在propidlbase.idl中重新定义错误
我正在尝试将以前的旧项目从Visual Studio 2010迁移到Visual Studio的当前版本(2019)。 我是Microsoft有关升级的变更说明,与以前的做法相比,VS 2019中使用ATL属性似乎有所变化。
我能够编译该项目,因为尝试在Visual Studio 2019中编译该项目时遇到了一堆重新定义错误。
4>64 bit Processing .\vc140.idl
4>vc140.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared\wtypes.idl
4>wtypes.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared\wtypesbase.idl
4>wtypesbase.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared\basetsd.h
4>basetsd.h
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared\guiddef.h
4>guiddef.h
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\wincrypt.idl
4>wincrypt.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\prsht.idl
4>prsht.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\objidl.idl
4>objidl.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\unknwn.idl
4>unknwn.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\propidlbase.idl
4>propidlbase.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\oaidl.idl
4>oaidl.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\urlmon.idl
4>urlmon.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\oleidl.idl
4>oleidl.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\servprov.idl
4>servprov.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\msxml.idl
4>msxml.idl
4>64 bit Processing C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\propidl.idl
4>propidl.idl
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(56): error MIDL2003: redefinition : tagVersionedStream
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(60): error MIDL2003: redefinition : PROPSETFLAG_DEFAULT
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(61): error MIDL2003: redefinition : PROPSETFLAG_NONSIMPLE
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(62): error MIDL2003: redefinition : PROPSETFLAG_ANSI
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(64): error MIDL2003: redefinition : PROPSETFLAG_UNBUFFERED
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(66): error MIDL2003: redefinition : PROPSETFLAG_CASE_SENSITIVE
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(70): error MIDL2003: redefinition : PROPSET_BEHAVIOR_CASE_SENSITIVE
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(90): error MIDL2003: redefinition : tagCAC
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(91): error MIDL2003: redefinition : tagCAUB
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(92): error MIDL2003: redefinition : tagCAI
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(93): error MIDL2003: redefinition : tagCAUI
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(94): error MIDL2003: redefinition : tagCAL
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(95): error MIDL2003: redefinition : tagCAUL
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(96): error MIDL2003: redefinition : tagCAFLT
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(97): error MIDL2003: redefinition : tagCADBL
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(98): error MIDL2003: redefinition : tagCACY
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(99): error MIDL2003: redefinition : tagCADATE
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(100): error MIDL2003: redefinition : tagCABSTR
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(101): error MIDL2003: redefinition : tagCABSTRBLOB
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(102): error MIDL2003: redefinition : tagCABOOL
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(103): error MIDL2003: redefinition : tagCASCODE
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(104): error MIDL2003: redefinition : tagCAPROPVARIANT
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(105): error MIDL2003: redefinition : tagCAH
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(106): error MIDL2003: redefinition : tagCAUH
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(107): error MIDL2003: redefinition : tagCALPSTR
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(108): error MIDL2003: redefinition : tagCALPWSTR
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(109): error MIDL2003: redefinition : tagCAFILETIME
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(110): error MIDL2003: redefinition : tagCACLIPDATA
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(111): error MIDL2003: redefinition : tagCACLSID
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(276): error MIDL2003: redefinition : tag_inner_PROPVARIANT
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(309): error MIDL2003: redefinition : PID_DICTIONARY
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(310): error MIDL2003: redefinition : PID_CODEPAGE
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(311): error MIDL2003: redefinition : PID_FIRST_USABLE
4>c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\propidlbase.idl(312): error MIDL2003: redefinition : PID_FIRST_NAME_DEFAULT
这是我的stdafx.h文件中的内容:
#pragma once
#include <SDKDDKVer.h>
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <atltypes.h>
#include <atlctl.h>
#include <atlhost.h>
#include <comdef.h>
using namespace ATL;
深入研究代码,看起来像#if宏触发了包含第二个定义的内容。 来自propidlbase.idl
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)")
这与项目或编译器设置有关吗,或者我是否需要另一个#define? 为了在应用程序项目中使用ATL属性,是否有特别需要设置的隐式解决方案设置(即2019年)?
编辑:根据Simon的评论,这是我尝试使用midl编译的生成的idl文件的导入:
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\wincrypt.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\prsht.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\objidl.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\unknwn.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\propidlbase.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\oaidl.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\urlmon.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\oleidl.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\servprov.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\msxml.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\propidl.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\ocidl.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\comcat.idl";
import "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include\atliface.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\oleacc.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\shtypes.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\MsHTML.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\dimm.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\dispex.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared\dxgitype.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\shared\dxgicommon.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\shared\dxgiformat.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\MsHtmHst.idl";
import "c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\docobj.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\ExDisp.idl";
import "C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\ObjSafe.idl";
解决方法
您应该以oa / oc / ole idls开始,并且不要使用直接的SDK路径,否则,midl编译器很可能会感到困惑。
只需确保midl.exe在路径中(例如使用Visual Studio 2019 developer command prompt时),并使用简化的.idl即可,如下所示:
import "ocidl.idl";
import "oleidl.idl";
import "oaidl.idl";
import "wincrypt.idl";
import "prsht.idl";
import "objidl.idl";
import "unknwn.idl";
import "propidlbase.idl";
import "urlmon.idl";
import "servprov.idl";
import "msxml.idl";
import "comcat.idl";
import "atliface.idl";
import "oleacc.idl";
import "shtypes.idl";
import "MsHTML.idl";
import "dimm.idl";
import "dispex.idl";
import "dxgitype.idl";
import "dxgicommon.idl";
import "dxgiformat.idl";
import "MsHtmHst.idl";
import "docobj.idl";
import "ExDisp.idl";
import "ObjSafe.idl";
,
根据Microsoft Documents,错误https://docs.microsoft.com/en-us/azure/databricks/administration-guide/access-control/workspace-acl为:您的工具链设置为自动引用系统名称空间中的任何类型。在您的IDL文件中,删除Windows名称空间的任何FileModel fileModel = DependencyService.Get<IImageFetcher>().ReadImagesAsync();
var items = new List<FileImageInfo>();
for (int i = 0; i < fileModel.Images.Count; i++)
{
var imageStream = ImageSource.FromStream(() => new MemoryStream(fileModel.Images[i]));
items.Add(new FileImageInfo
{
FileType = "Jpeg",FileSize = fileModel.Sizes[i],DateCreated = fileModel.Dates[i],imageSource = imageStream
});
}
Items.ItemsSource = items;
指令;您只需import
就可以在项目中定义任何类型。
您可以编辑stdafx.h并参考此MIDL2003以获得更多信息。
import
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。