Коды ошибок DirectShow

Использую библиотеку DirectShowLib. Где в этой библиотеке находятся константы с кодами ошибок S_OK REGDB_E_CLASSNOTREG CLASS_E_NOAGGREGATION CLASS_E_NOAGGREGATION E_NOINTERFACE E_POINTER и остальные? Похоже, что они вообще не прописаны :thinking:
Где взять их значения? Их даже в MSDN не видно.

Здесь их нет.
Не из Delphi же их тырить :dizzy_face:

А, во, наверное здесь

А в самой библиотеке их точно нет? :thinking: Как так? :dizzy_face: Может надо какой-то using добавить?

И почему коды ошибок в int не лезут? :dizzy_face:

        const int CLASS_E_NOAGGREGATION = (int)0x80040110;
        const int REGDB_E_CLASSNOTREG = (int)0x80040154;

Говорит, что uint надо. Хотя в экскепшене код ошибки интовый приходит :dizzy_face:
Это как понимать?
а если написать так


        const int CLASS_E_NOAGGREGATION = -2147221232;
        const int REGDB_E_CLASSNOTREG = -2147221164;

то работает :thinking:

Ну так там видимо оно кастует и т.д. откуда-то полученную переменную или просто байты туда читает. А тут компилятор видит, что явно фигня какая-то.

Может в каких-нибудь библиотеках-обертках для винапи есть.
А так вряд ли много кому нужны значения этих кодов, обычно удобнее исключения.

Для каких-то конкретных типов ошибок, если их надо отделить от других, могут кидаться свои типы исключений:

COMException Class (System.Runtime.InteropServices) | Microsoft Docs

The common language runtime transforms well-known HRESULTs to .NET Framework exceptions, enabling COM objects to return meaningful error information to managed clients. The HRESULT to exception mapping also works in the other direction by returning specific HRESULTs to unmanaged clients. For mapping details, see How to: Map HRESULTs and Exceptions.

Если придерживаться такой логики, то можно сказать, что какую-то конкретную ошибку обрабатывать не надо (не важно, что мы пишем), потому что она вряд ли может у кого-то возникнуть.

Причем тут это, в NET же далеко не 100% покрытие винапи обертками. Видимо приоритет у добавления списка кодов был низкий )

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