【问题标题】:Is it possible to target windows 10.0.14393 with C++/WinRT?是否可以使用 C++/WinRT 以 Windows 10.0.14393 为目标?
【发布时间】:2018-11-09 03:49:25
【问题描述】:

我想使用 C++/WinRT 为卡在 Win 10.0.14393(或 1609)上的 Lumia 制作一个应用程序。我用

创建了一个空白应用项目
  • 目标平台版本:10.0.17134.0 和
  • 目标平台最小。版本:10.0.14393。

项目编译失败,出现以下错误:

错误 C2039:“DisconnectUnloadedObject”:不是“winrt::BlankApp2::implementation::MainPageT”的成员

错误 C2039:“UnloadObject”:不是“winrt::BlankApp2::implementation::MainPageT”的成员

这是错误还是故意行为?请注意,设置任何较新的 min。 version 导致构建成功。

【问题讨论】:

  • 您的问题不是 C++/WinRT。问题是您在 XAML 中使用x:Load,但x:Load requires 15063
  • @Raymond,您很可能指向正确的方向。你也能告诉我如何避免它吗?我在两个 XAML 文件中都看不到它。
  • 找出 DisconnectUnloadedObject 的来源。如果它来自生成的代码,则找出导致该代码生成的 XAML 标记。
  • 很抱歉,我找不到是哪个 XAML 标记生成了这个函数定义。我从(新的)MainPage.xaml 中删除了几乎所有内容,但问题仍然存在。我倾向于认为这是工具配置中的问题,该工具将 idl 文件转换为实现文件。不幸的是,我还没有找到一种在不放弃 XAML 文件的情况下调整此过程的方法。
  • 我建议使用较旧的编译器 Visual Studio 2015。我在 2015 年和 2017 年之间移动了 C++/WinRT 源代码,似乎存在一些真正的差异。我似乎总是有问题并最终摆弄解决方案属性。使用 C++/WinRT 移动目标的整个区域似乎有点令人担忧和混乱。

标签: c++ visual-studio-2017 c++-winrt


【解决方案1】:

最新版本的 C++/WinRT 可以支持所有版本的 Windows 10,包括 14393 和更早的版本。

请记住,C++/WinRT 既是库又是语言投影。语言投影提供对针对给定 Windows 版本的 Windows API 的访问。每个版本都引入了新的 API。因此,如果您想以最低版本的 Windows 为目标,您需要确保将自己限制在该版本的 Windows 上可用的 API。但是,我建议使用最新的编译器和最新的 Windows SDK,因为它们包含许多错误修复。

【讨论】:

  • 感谢您的回复。恐怕你没有明白我的意思。我明白我需要保持在 Min 的范围内。 SDK 功能。问题是我找不到方法——即使是在一个新创建的项目中。 (投反对票不是我的)
  • 怎么样?通过将“目标平台版本”设置为您已安装的 SDK 的最新版本(RS5 或更高版本)。
  • 诀窍是这个版本会影响使用哪个版本的工具链来构建项目。旧版本不仅限制了 API 的哪个子集可用,而且还强制使用旧工具构建项目,这些工具不包含后续版本中的所有修复。
  • 使用较新的 SDK (17763) 作为 Target Platform Version 确实成功了,并且代码可以编译和工作。谢谢@Kenny。
【解决方案2】:

我建议您在针对较旧的 C++/WinRT 和 Windows 10 更新时使用 Visual Studio 2015。我的印象是,其中大部分是在 Visual Studio 2015 之上提供的,包括 Visual Studio 2015 更新、Windows 10 SDK 更新和 C++/WinRT 更新。

在将 Visual Studio 2015 与 C++/WinRT 结合使用时,您将需要最新更新 Update 3。检查更新并确保您的 Visual Studio 2015 副本具有最新更新。我只是使用安装 Visual Studio 2015 Enterprise 来重新编译可以使用 Visual Studio 2017 编译的东西,发现我缺少工具和 SDK,包括我尚未安装的 Update 3 中的 Win 10 SDK 10.0.14393 .

您还可以从控制面板中转到程序和功能,在列表中查找 Microsoft Visual Studio 2015,然后单击鼠标右键并更改,这将允许您检查已安装的内容并进行任何更改。

在过去的几个月里,我使用了 C++/WinRT,我同时使用了 Visual Studio 2017 社区版和 Visual Studio 2015 企业版。

在将解决方案从 VS 2015 迁移到 VS 2017 时,我发现了差异,这需要我查看解决方案的“属性”页面。另见synchronizing SDK with Windows 10 update and using WinRT with Standard C++中的讨论

使用最新的 Windows 10 更新和 VS 2017 最适合我,因为我能够针对最近的 Windows 10 更新。但是,我发现尝试使用 VS 2017 来定位较旧的 Windows 10 更新可能会出现问题。

很抱歉,我不能更具体。这整个 C++/WinRT 和 Windows 10 更新领域的牛仔比我想要的要多得多,尽管现在它似乎正在安定下来。

C++/WinRT 是一个模板库,最初是 GitHub 上的一个开源项目。我的印象是微软已经收购了它,它现在是标准产品。我相信随着 Visual Studio 2015 和 Visual Studio 2017 开始实施更多的 C++17 和提议的 C++20 标准以及协程技术规范,曾经对 C++/WinRT 进行了重大改写。

这似乎是一个在某种程度上仍在变化的领域。然而,大部分变化发生在 VS 2015 和早期的 VS 2017 以及 SDK 上。有了最新的更新,它现在似乎很稳定。

【讨论】:

  • 我在微软的开发者反馈平台上发起了一个案例。我相信以新工具集为目标的周年更新是可行的。出于你提到的原因,我愿意这样做。无论如何,谢谢你的回答:)。
猜你喜欢
  • 2019-11-22
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多