Интеграция Win2D с webrtc-uwp-sdk, но получение сообщений об ошибках MIDL
Я пытаюсь интегрировать 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 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 он уже жалуется на "не удается открыть исходный файл".
Итак, мои вопросы:
- Правильно ли я добавил пакет Win2D в Org.WebRtc или мне нужно использовать его в Org.WebRtc.WrapperGlue? (А может даже в обоих?)
- Почему я получаю ошибки MIDL5051 и MIDL5030?
- Как я могу успешно интегрировать Win2D в это решение с 2 проектами, где только один из них имеет файл pch.h?
Я очень усердно работал, чтобы достичь этого, но сейчас я боюсь, что интеграция невозможна. Я надеюсь, что есть ветераны C++/WinRT, которые могут мне помочь.