Получить COM-объект, чтобы генерировать исключение для любого результата, кроме S_OK (0) в C #

В настоящее время я работаю над обновлением проекта, который широко использует COM / MFC / (кто знает, сколько других технологий).В рамках обновления мы пытаемся перенести как можно больше функций в управляемый код C #, но, к сожалению, некоторые вещи просто не могут перемещаться (по причинам, которые я не буду вдаваться в подробности). Одна из таких вещей - это участок кода, который грубо злоупотребляет COM и возвращает указатели в HRESULT, которые позже приводятся к различным другим объектам, реализующим COM-интерфейс. Я пробовал следующий код для преобразования HRESULT в указатель, из которого я затем могу получить интерфейс:

        MyComInterfaceInCS myObj = null;

        try
        {
            world.GetTD_MyComInterfaceInCS();
        }
        catch (COMException comException)
        {
            int pointerValue = Marshal.GetHRForException(comException);

            IntPtr myObjPointer = new IntPtr(pointerValue);

            myObj = (MyComInterfaceInCS) Marshal.GetObjectForIUnknown(myObjPointer);
        }

.... , но , исключение COM не генерируется, и я предполагаю, что это потому что указатель не является отрицательным значением и, следовательно, технически не является ошибкой COM. Есть ли способ настроить COM на объекте, чтобы генерировать исключение COM для чего-либо, НО S_OK (0)?

5
задан nvoigt 27 May 2019 в 08:33
поделиться