Интеграция Win2D с webrtc-uwp-sdk, но получение сообщений об ошибках MIDL - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь интегрировать Win2D в webrtc-uwp-sdk , потому что я хочу создать пользовательский VideoCapturer и, следовательно, использовать класс CanvasBitmap Win2D.

Поскольку я новичок в C ++ / WinRT, я сначала создал небольшое тестовое приложение XAML, начиная с образца Microsoft Screen Capture . Можно сказать, что я просто портировал код C # на код C ++ / WinRT. Я добавил пакет NuGet для Win2D.uwp и в pch.h включил следующие файлы:

#include "winrt/Microsoft.Graphics.Canvas.h"
#include "winrt/Microsoft.Graphics.Canvas.UI.Xaml.h"
#include "winrt/Microsoft.Graphics.Canvas.UI.Composition.h"

Так, чтобы в MainPage.cpp я мог использовать пространства имен

using namespace winrt::Microsoft::Graphics::Canvas;
using namespace winrt::Microsoft::Graphics::Canvas::UI;
using namespace winrt::Microsoft::Graphics::Canvas::UI::Composition;

Пока все хорошо. Без проблем. Он скомпилирован и запущен.


Теперь я хотел бы сделать то же самое в webrtc-uwp-sdk, но это не так тривиально, потому что, как вы можете видеть в на этой картинке проект, который содержит pch. Файл h не совпадает с тем, где находится файл impl_webrtc_VideoCapturer.h (где я хочу использовать классы Win2D).

Тем не менее я попытался действовать так же, как в моем тестовом приложении, и добавил пакет NuGet в проект Org.WebRtc. Однако, это уже дает мне кучу сообщений error вроде этого:

error MIDL5051: [msg]use of the [exclusiveto] interface is not valid, use the runtimeclass for which this interface is exclusiveto instead [context]: Microsoft.Graphics.Canvas.CanvasDevice [ Interface 'Microsoft.Graphics.Canvas.ICanvasDevice' ( RuntimeClass 'Microsoft.Graphics.Canvas.CanvasDevice' ) ]
error MIDL5030: [msg]Type name collides with an existing type. [context]: Microsoft.Graphics.Canvas.ICanvasDevice [ Interface 'Microsoft.Graphics.Canvas.ICanvasDevice'  ]

А при добавлении файлов #include в pch.h он уже жалуется на "не могу открыть исходный файл".

Итак, мои вопросы:

  1. Правильно ли я добавил пакет Win2D в Org.WebRtc или мне нужно использовать его в Org.WebRtc.WrapperGlue? (А может даже в обоих?)
  2. Почему я получаю ошибки MIDL5051 и MIDL5030?
  3. Как я могу успешно интегрировать Win2D в это решение с 2 проектами, где только один из них имеет файл pch.h?

Я очень усердно работал, чтобы зайти так далеко, но теперь я беспокоюсь, что интеграция даже невозможна. Я надеюсь, что есть некоторые ветераны C ++ / WinRT, которые могут мне помочь.

...