如何编译VS 2017 C ++ / CX项目

eri*_*zer 5 c++-cx visual-studio-2017

我在VS 2017中创建了一个新的C ++动态DLL项目(非UWP!)。无法使用/ ZW(C ++ / CX)进行编译。为什么不?请不要回答“创建UWP项目”,这不是这里的问题。我可以制作可以正常编译的UWP项目。我已经看到很多不是UWP目标的C ++ / CX项目的示例代码,它们只是无法在VS 2017中编译,我想知道为什么不这样做。除非答案是“没有UWP编译C ++ / CX项目”,否则我看不出任何证据。

步骤1:建立新专案。

编译。编译正常。

步骤2:开启C ++ / General / Consume Windows Runtime Extension(/ ZW)。关闭/ Gm。

编译。

1>c1xx : warning C4199: two-phase name lookup is not supported for C++/CLI, C++/CX, or OpenMP; use /Zc:twoPhase-
1>c:\users\efrazer\source\repos\dll2\dll2\stdafx.cpp : fatal error C1107: could not find assembly 'platform.winmd': please specify the assembly search path using /AI or by setting the LIBPATH environment variable
Run Code Online (Sandbox Code Playgroud)

步骤3:Ungh。阅读有关它。在C ++设置中将符合模式设为否

编译。

1>c:\users\efrazer\source\repos\dll2\dll2\stdafx.cpp : fatal error C1107: could not find assembly 'platform.winmd': please specify the assembly search path using /AI or by setting the LIBPATH environment variable
Run Code Online (Sandbox Code Playgroud)

步骤4:Ungh。在线阅读更多有关找到正确路径的信息。在C ++设置中将其他#using目录设置为:

$(VCIDEInstallDir)vcpackages;
$(WindowsSDKDir)UnionMetadata;
C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\Annotate
Run Code Online (Sandbox Code Playgroud)

d;

编译。

1>------ Build started: Project: Dll2, Configuration: Debug Win32 ------
1>stdafx.cpp
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.12.25827\include\vccorlib.h(965): error C3624: 'System::Attribute': use of this type requires a reference to assembly 'mscorlib'
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.12.25827\include\vccorlib.h(965): note: This diagnostic occurred while importing type 'Windows::Foundation::Metadata::DefaultAttribute ' from assembly 'Windows, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null'.
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.12.25827\include\vccorlib.h(1706): note: see reference to class template instantiation 'Platform::Array<unsigned char,1>' being compiled
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.12.25827\include\vccorlib.h(965): error C2373: 'Windows::Foundation::Metadata::DefaultAttribute::DefaultAttribute': redefinition; different type modifiers
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.12.25827\include\vccorlib.h(965): note: This diagnostic occurred while importing type 'Windows::Foundation::Metadata::DefaultAttribute ' from assembly 'Windows, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null'.
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.12.25827\include\vccorlib.h(965): error C2337: 'Default': attribute not found
1>Done building project "Dll2.vcxproj" -- FAILED.
Run Code Online (Sandbox Code Playgroud)

步骤5:在线查找错误。我查到的所有内容都告诉我我不能混合UWP code with C++ native code或类似的东西。

我错过了一些简单的事情吗?这不应该那么困难,对吧?

eri*_*zer 5

昨晚我知道了。#using路径必须完全正确,否则编译器将出现错误。没有比这更神奇的了。

对于面向Windows SDK版本16299的编译器v141(Visual Studio 2017),路径必须为:

$(VCIDEInstallDir)vcpackages;
$(WindowsSDKDir)UnionMetadata\10.0.16299.0
Run Code Online (Sandbox Code Playgroud)

而已!然后编译!而且我验证了可以使用调试器逐步解决问题。