C2039 'XamlTypeInfo': не является членом 'winrt :: Microsoft :: UI :: Xaml' в XamlTypeInfo.g. cpp - PullRequest
0 голосов
/ 13 февраля 2020

Я добавлю Microsoft :: UI :: Xaml Пакет NuGet в мой проект C ++ / WinRT Blank App вызовет ошибку.

Выходное сообщение:

1> ------ Перестроить все началось: Проект: TxtRecordGenerator, Конфигурация: Отладка x64 ------ 1> 64-битная обработка MIDLRT C: \ Users \ a124p \ Documents \ GitHub \ VisualizationRecorder \ TxtRecordGenerator \ App .idl 1> App.idl 1> 64-битная обработка MIDLRT C: \ Program Files (x86) \ Windows Kits \ 10 \ Include \ 10.0.18362.0 \ winrt \ winrtbase.idl 1> winrtbase.idl 1> 64-битная MIDLRT Обработка C: \ Program Files (x86) \ Windows Kits \ 10 \ Include \ 10.0.18362.0 \ winrt \ midlbase.idl 1> midlbase.idl 1> Обработка WinMD 1> Обработка файла входных метаданных x64 \ Debug \ Unmerged \ App .winmd. 1> Обработка входных файлов метаданных x64 \ Debug \ Unmerged \ MainPage.winmd. 1> Обработка входных файлов метаданных x64 \ Debug \ Unmerged \ XamlMetaDataProvider.winmd. 1> Сохраненный выходной файл метаданных TxtRecordGenerator.winmd. 1> Проверка файла метаданных x64 \ Debug \ Merged \ TxtRecordGenerator.winmd. 1> pch. cpp 1> Приложение. cpp 1> MainPage. cpp 1> module.g. cpp 1> XamlTypeInfo.Impl.g. cpp 1> XamlTypeInfo.g. cpp 1> C: \ Users \ a124p \ Documents \ GitHub \ VisualizationRecorder \ TxtRecordGenerator \ Generated Files \ XamlTypeInfo.g. cpp (919,77): ошибка C2039: 'XamlTypeInfo': не является членом 'winrt: : Microsoft :: UI :: Xaml '1> C: \ Users \ a124p \ Documents \ GitHub \ VisualizationRecorder \ TxtRecordGenerator \ Generated Files \ winrt \ Microsoft.UI.Xaml.Controls.h (16562): сообщение: см. Объявление 'winrt :: Microsoft :: UI :: Xaml' 1> C: \ Users \ a124p \ Documents \ GitHub \ VisualizationRecorder \ TxtRecordGenerator \ Generated Files \ XamlTypeInfo.g. cpp (919,65): ошибка C3083 : 'XamlTypeInfo': символ слева от '::' должен иметь тип 1> C: \ Users \ a124p \ Documents \ GitHub \ VisualizationRecorder \ TxtRecordGenerator \ Generated Files \ XamlTypeInfo.g. cpp ( 919,79): ошибка C2039: «XamlControlsXamlMetaDataProvider»: не является членом «winrt :: Microsoft :: UI :: Xaml» 1> C: \ Users \ a124p \ Documents \ GitHub \ VisualizationReco rder \ TxtRecordGenerator \ Generated Files \ winrt \ Microsoft.UI.Xaml.Controls.h (16562): сообщение: см. объявление 'winrt :: Microsoft :: UI :: Xaml' 1> C: \ Users \ a124p \ Документы \ GitHub \ VisualizationRecorder \ TxtRecordGenerator \ Generated Files \ XamlTypeInfo.g. cpp (919,111): ошибка C3861: 'XamlControlsXamlMetaDataProvider': идентификатор не найден 1> Готово, строительный проект "TxtRecordGenerator.vx. ========== Перестроить все: 0 выполнено, 1 не выполнено, 0 пропущено ==========

Кажется, это ошибка генератора кода WinRT C ++ вызвано.

Файл кода проекта C ++ / WinRT выглядит следующим образом:

код pch.h:

#pragma once
#include <windows.h>
#include <unknwn.h>
#include <restrictederrorinfo.h>
#include <hstring.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Foundation.Collections.h>
#include <winrt/Windows.ApplicationModel.Activation.h>
#include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Controls.Primitives.h>
#include <winrt/Windows.UI.Xaml.Data.h>
#include <winrt/Windows.UI.Xaml.Interop.h>
#include <winrt/Windows.UI.Xaml.Markup.h>
#include <winrt/Windows.UI.Xaml.Navigation.h>
#include <winrt/Microsoft.UI.Xaml.Controls.h>

MainPage.idl:

namespace TxtRecordGenerator
{
    [default_interface]
    runtimeclass MainPage : Windows.UI.Xaml.Controls.Page
    {
        MainPage();
    }
}

MainPage.h:

#pragma once

#include "MainPage.g.h"

namespace winrt::TxtRecordGenerator::implementation
{
    struct MainPage : MainPageT<MainPage>
    {
        MainPage();
    };
}

namespace winrt::TxtRecordGenerator::factory_implementation
{
    struct MainPage : MainPageT<MainPage, implementation::MainPage>
    {
    };
}

MainPage. cpp:

#include "pch.h"
#include "MainPage.h"
#include "MainPage.g.cpp"

using namespace winrt;
using namespace Windows::UI::Xaml;

namespace winrt::TxtRecordGenerator::implementation
{
    MainPage::MainPage()
    {
        InitializeComponent();
    }
}

MainPage.xaml:

<Page
    x:Class="TxtRecordGenerator.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TxtRecordGenerator"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:controls="using:Microsoft.UI.Xaml.Controls"
    mc:Ignorable="d">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <CalendarDatePicker x:Name="BeginDatePicker" 
                            PlaceholderText="Pick a date" 
                            Header="Begin Date" 
                            Foreground="{ThemeResource SystemAccentColorLight1}" 
                            Grid.Row="0" 
                            Grid.Column="0" 
                            HorizontalAlignment="Center" 
                            VerticalAlignment="Center" />
        <CalendarDatePicker x:Name="EndDatePicker" 
                            PlaceholderText="Pick a date" 
                            Header="End Date" 
                            Foreground="{ThemeResource SystemAccentColorLight1}" 
                            Grid.Row="0" 
                            Grid.Column="1" 
                            HorizontalAlignment="Center" 
                            VerticalAlignment="Center" />
        <controls:NumberBox x:Name="BeginNumberBox"
                   Header="Enter an integer:" 
                   Value="1" 
                   SpinButtonPlacementMode="Compact" 
                   SmallChange="10"
                   LargeChange="100"
                   Grid.Row="1"
                   Grid.Column="0"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"/>
        <controls:NumberBox x:Name="EndNumberBox"
                   Header="Enter an integer:" 
                   Value="1" 
                   SpinButtonPlacementMode="Compact" 
                   SmallChange="10"
                   LargeChange="100"
                   Grid.Row="1"
                   Grid.Column="1"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center"/>
    </Grid>
</Page>

Среда разработки:

  • IDE: Visual Studio 2019

    Целевая версия проекта UWP: Windows 10, версия 1903 (10.0; сборка 18362)

    Минимальная версия проекта UWP: Windows 10, версия 1903 (10.0; сборка 18362)

Этот вопрос меня смущает. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 14 февраля 2020

Сначала вам нужно объявить ресурсы приложения WinUI в App.xaml:

<Application ......>
    <Application.Resources>
        <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
    </Application.Resources>
</Application>

Затем также добавьте следующий файл заголовка.

#include "winrt/Microsoft.UI.Xaml.XamlTypeInfo.h"

Более подробно вы можете обратиться к этому документу: Простой пример C ++ / WinRT Windows UI Library .

...