Определения и элементы компонентной объектной модели, неспособные поглощать
Я прочитал статью(ы) о КОМ, и одна из этих статей была здесь внутри CodeProject Мне нужно подчеркнуть некоторые моменты, которые не упоминаются в каждой из этих статей, даже в той, что опубликована здесь, и они вызывают у меня большую путаницу в понимании COM.
1-я знаю, что интерфейс-это просто абстрактный тип (т. е. не включает в себя никакой реализации для своих членов, просто объявление).
2-Когда я создаю COM-объект, мне нужны эти два параметра среди прочих: CLSID и идентификатор IID Я заранее знал, что нельзя создать объект абстрактного типа, интерфейса или класса, поэтому мне нужен CLSID что же это такое идентификатор GUID для класса, содержащего конкретную реализацию для члена(ов) в пределах данного интерфейса, который задается через идентификатор IID?
3-Что означает использование Метод queryinterface() чтобы получить какой-либо дополнительный указатель интерфейса? Означает ли это, что COM-класс, из которого я создаю экземпляр объекта, COM-объект, реализует более одного интерфейса, и мне тоже нужна эта реализация? если это правда, то это означает, что у меня есть класс С реализация и интерфейс ИА и еще один IB если я создам свой COM-объект, используя только идентификатор IID для интерфейса ИА что я смогу вызывать только методы, объявленные в интерфейсе ИА и не сможет вызвать методы, объявленные в интерфейсе IB однако сам класс имеет реализацию для методов обоих интерфейсов?
4 - что означает, что любой другой COM-интерфейс должен быть производным от IUnknown? Означает ли это, что если я собираюсь определить COM-интерфейс, мне нужно, чтобы он наследовал от интерфейса IUnknown?
5-каковы правила идентификации COM, времени жизни и двоичного макета?
Что я уже пробовал:
Я читал статьи для компонентной объектной модели, IUnknown, краткое описание двоичного интерфейса приложения, проприетарного формата, COM-взаимодействия.