Ошибка компилятора для устаревшего COMType с использованием DirectShow

Я кодирую маленькое приложение, которое делает фотографию пользователя для печати на идентификационной карточке. Я посмотрел вокруг и нашел несколько различных примеров этого в C# это было бы идеально для меня, за исключением 2 вопросов, оба достижения UCOM элемент теперь устарел в более новой .NET рамки.

Это код, который дает ошибку:

int hr = devEnum.CreateClassEnumerator(FilterCategory.VideoInputDevice, out classEnum, CDef.None);

И это точная формулировка ошибки:

Ошибка 2 Аргумент 2: невозможно преобразовать из out.System.Runtime.InteropServices.ComTypes.IEnumMoniker'в System.Runtime.InteropServices.UCOMIEnumMoniker' E:\Programming\Application Files\WebCamControl2\WebCamControl2.cs 108 89 WebCamControl

Я использую DirectShow DLL, которая последний раз использовалась в 2005 году, и она использует UCOMIEnumMoniker а также UCOMIMoniker которые были изменены на IEnumMoniker а также IMoniker соответственно.

Как я могу обойти эту ошибку компиляции? Могу ли я привести новый тип к старому, даже если он устарел, или мне нужно отказаться от использования библиотеки DirectShow?

1 ответ

Вы обычно не имеете дело с UCOMxxx типы, если вы не работаете с древними версиями.NET. Из источника DirectShow.NET:

#if USING_NET11
            [Out] out UCOMIEnumMoniker ppEnumMoniker,
#else
            [Out] out IEnumMoniker ppEnumMoniker,
#endif

Вы должны узнать, где вы получаете UCOMIEnumMoniker в вашем проекте точно, и скорее всего его там быть не должно.

Другие вопросы по тегам