Как проверить во время выполнения, какой COM-класс COM был использован для создания экземпляра интерфейса?
Предположим, у вас есть интерфейс COM ICOMInterface
это реализовано Coclasses Coclass1
а также Coclass2
, Ни у одного из этих классов нет собственных интерфейсов (для простоты и для иллюстрации моей проблемы).
В C# вы можете создать экземпляр интерфейса COM из кокласса следующим образом:
ICOMInterface myComInterface = new Coclass1();
Теперь, как вы можете определить, myComInterface
был создан Coclass1
или же Coclass2
?
Использование оператора "is", как следует, всегда возвращает истину, и как таковое для этой цели бесполезно.
Debug.WriteLine(myComInterface is Coclass1) // writes "True"
Debug.WriteLine(myComInterface is Coclass2) // writes "True"
Это сработало бы, если бы я тестировал интерфейсы, а не коклассы, но у этих коклассов нет интерфейсов, отличных от того, который они оба реализуют, ICOMInterface
,
Я надеюсь, что есть простой ответ на этот довольно общий сценарий, который я пропускаю, в противном случае я могу опубликовать более конкретные детали, если это потребуется.
Спасибо за вашу помощь!
1 ответ
Если COM-объект реализует интерфейс IPersist, вы можете получить его CLSID через IPersist::GetClassID()
метод. Это может быть все, что вам нужно знать, с каким классом вы работаете. Вы также можете получить удобочитаемый ProgID через WinAPI ProgIDFromCLSID()
метод.
Смотрите здесь: C# Получить ProgID из COM-объекта