Как проверить во время выполнения, какой COM класс использовался для создания интерфейса? - PullRequest
2 голосов
/ 28 июля 2010

Предположим, у вас есть COM-интерфейс ICOMInterface, который реализован с помощью coclasses Coclass1 и Coclass2. Ни у одного из этих классов нет собственных интерфейсов (для простоты и для иллюстрации моей проблемы).

В C # вы можете создать экземпляр интерфейса COM из кокласса следующим образом:

ICOMInterface myComInterface = new Coclass1();

Теперь, как вы можете определить, был ли myComInterface создан Coclass1 или Coclass2?

Использование оператора "is", как следует, всегда возвращает true, и как таковое для этой цели бесполезно.

Debug.WriteLine(myComInterface is Coclass1) // writes "True"
Debug.WriteLine(myComInterface is Coclass2) // writes "True"

Это работало бы, если бы я тестировал интерфейсы, а не коклассы, но у этих коклассов нет интерфейсов, отличных от того, который они оба реализуют, ICOMInterface.

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

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 03 августа 2010

Если COM-объект реализует интерфейс IPersist , вы можете получить его CLSID с помощью метода IPersist::GetClassID(). Это может быть все, что вам нужно знать, с каким классом вы работаете. Вы также можете получить удобочитаемый ProgID с помощью метода WinAPI ProgIDFromCLSID().

Смотрите здесь: C # Получить progID из COM-объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...