【问题标题】:convert old C++ Winrt dll project based on sample to Windows Run-time Component project将基于示例的旧 C++ Winrt dll 项目转换为 Windows 运行时组件项目
【发布时间】:2018-09-14 14:19:46
【问题描述】:

在项目模板可用之前,我有从 C++ WInrt 示例创建的旧 C++ Winrt dll 项目。

如何在不从新项目开始的情况下将其更新为 Winrt 运行时组件项目模板。

我检查了项目设置,找不到任何使两个项目不同的决定性内容,但是新样式的项目与运行时组件一起工作得更好,特别是当你尝试访问 Idl 生成的头文件时,你不会收到错误说 Winrt 的版本不同。

干杯

【问题讨论】:

    标签: c++-winrt


    【解决方案1】:

    Introduction to C++/WinRT: Visual Studio support for C++/WinRT, and the VSIX 所述:

    或者,您可以通过将<CppWinRTEnabled>true</CppWinRTEnabled> 属性添加到其.vcxproj 文件来转换现有项目。

    <Project ...>
        <PropertyGroup Label="Globals">
            <CppWinRTEnabled>true</CppWinRTEnabled>
    ...
    

    添加该属性后,您将获得对该项目的 C++/WinRT MSBuild 支持,包括调用 cppwinrt.exe 工具。

    【讨论】:

    • 再次感谢您好,添加该行会启动新的 winrt 工具链,我可以看到它现在会在您从另一个项目添加 winmd 时生成文件。但是,一旦您引用了 winmd intellisense 就会死掉,并且如果您引用了 winmd 代码中的任何内容,则不会构建。这适用于新项目模板,并且在 C++ 项目中引用 winmd 时还有更多工作要做,而不仅仅是添加引用,在 C# 项目中是这样,而不是在 C++ 项目中。但是我现在有工作方法,但是仅使用新的 winrt 项目模板,我的旧项目在引用运行时组件时失败。干杯
    • 错误消息我尝试在 Winmd 中构建代码引用类型“错误 C2039: 'check_version': is not a member of 'winrt'” 指向这行代码 static_assert(winrt::check_version (CPPWINRT_VERSION, "1.0.180227.3"), "不匹配的组件和基本标头。");谢谢
    • @iko:使用 C++/WinRT VSIX 扩展需要 Windows SDK 版本 10.0.17134.0。看起来您使用的是较旧的 Windows SDK 版本。使用/showIncludes 编译器选项找出发生了什么。但这确实是一个不同的问题。该问题询问如何在不使用 C++/WinRT 项目模板生成的项目中启用 C++/WinRT 工具支持,此答案提供了该问题的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2017-08-05
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多