Winmt C ++ Winmd, видимый в проекте CW UWP, но не проект C ++ Winrt - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть некоторые структуры и перечисления в файле IDL внутри проекта WRC c ++ / winrt.

Это позволяет разделить структуры данных между C ++ и C #.

Добавить Winmd в UWP C #Project и типы видны хорошо

Затем при попытке winrt проектов

  1. Winrt CoreApp Project строится нормально после добавления winmd, но никогда не видит типы.

  2. Winrt Blank Project не удается скомпилировать в некоторых файлах, связанных с xaml, из-за моих типов, просто в результате добавления winmd.

Но таких проблем с проектом C # UWP нет.В C # UWP я могу видеть мой тип и использовать его без проблем.

ура

1 Ответ

0 голосов
/ 06 ноября 2018

Так что, если C # может использовать типы, реализованные в компоненте WinRT, похоже, вы не включили заголовочный файл. Включили ли вы файл заголовка для компонента Windows Rutime в файл pch.h?

Допустим, у вас есть проектируемый тип времени выполнения Windows с именем Cat, который находится в компоненте времени выполнения Windows с именем MyComponent, если имя вашего файла .winmd - "MyComponent.winmd", выполните следующие действия:

  1. В вашем потребляющем проекте (например, в .exe) добавьте ссылку на файл .winmd.

  2. Построить проект (должен сделать это!)

  3. Включите заголовок для него в файл pch.h:

    #include "winrt/MyComponent.h" <-- don't forget!

Как только это будет сделано, вы сможете найти Cat (не забудьте разрешение области видимости пространства имен и т. Д.)

// some consuming .cpp file

#include "pch.h"

using namespace winrt;
using namespace Windows::Foundation;
using namespace MyComponent;    // <-- Add for convenience ...or not

App::App()
{
    Cat tabby();        // <-- Should work like a charm ;)
}
...