Почему TypeName () возвращает разные результаты из .GetType и TypeOf при работе с COM?

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

Мне очень тяжело работать с двумя разными взаимодействиями (Excel и EPDM), которые оба широко использовали параметры со слабой типизацией. Я продолжаю сталкиваться с проблемами, используя возвращенные объекты и приводя их к надлежащему типу (согласно документации). Потратив кучу времени, я обнаружил, что с помощьюTypeName, GetTypeиОператор TypeOf С COM-объектами можно получить разные результаты, и в разных обстоятельствах каждый из них может быть более или менее надежным, чем следующий.

Сейчас в большинстве случаевTypeName() кажется наиболее надежным для определения типа с COM-объектами. Тем не менее, избегать двух других функций мне кажется довольно культовым, и, кроме того, сегодня я столкнулся синтересная проблема где я не могу привести объект к типу, указанномуTypeName(), В комментариях к этой проблеме было затронуто интересное понятие, что объекты, которые реализуютIDispatch может на самом деле вернутьотправляется имя интерфейса, которое может частично объяснить различия.

Мне бы очень хотелось лучше понять, как на самом деле работают эти функции, но я немного теряюсь при работе с.NET ReferenceSourceПоэтому я предлагаю вознаграждение по этому вопросу в надежде, что кто-нибудь сможет объяснить, как работают эти различные функции и в каком контексте следует использовать каждую из них.

Вот выдержка из кода работы с взаимодействием Excel.

Dim DocProps As Object 
DocProps = WeeklyReports.CustomDocumentProperties 'WeeklyReports is a Workbook object
Debug.Print(DocProps Is Nothing)
Debug.Print(TypeName(DocProps))
Debug.Print(TypeOf (DocProps) Is DocumentProperties)
Debug.Print(DocProps.GetType.ToString)

Выход:

Ложь
Свойства документа
Ложь
Система .__ ComObject

Ответы на вопрос(1)

Ваш ответ на вопрос