Объяснение идеологии COM на примере осла

Автор Михаил Власов
Прислал Eugene Kasnerik


  > а возможно ли в принципе, имея указатель на интерфейс IUnknown получить
  > реальный GUID этого интерфейса?

Hасколько я понял, ситуация у тебя такая: Hа руках есть указатель на какой-то интерфейс, но какой именно - не известно. И тебе хотелось бы узнать, что это за интерфейс.

Так вот - идеология COM подразумевает, что:
  1. Либо ты знаешь, какой интерфейс ты держишь.
  2. Либо ты просишь у интерфейса другой, который тебе нужен.

Тут могу привести такую вот аллегорию:

Допустим, есть некое животное, например - осел.
У него есть всякие ослиные наросты: уши, ноги, хвост. У самцов всякие там прочите ослиные достоинства. У ослиц имеются ихние, ослиные, титьки.

Дело происходит днем. Ты подходишь к ослу и хватаешь его, скажем, за уши. Ты видишь, что это уши. И ты знаешь что с ними делать. Ты прислоняешься к ним и что есть мочи, орешь. Осел, естественно, пучит глаза и убегает. Это был вполне ожидаемый результат, и ты, радостно улыбаясь, идешь по своим делам, удовлетворенный решением поставленной задачи.

Теперь ситуация другая. Дело происходит ночью. Ты идешь и натыкаешся на что-то теплое. Ты протягиваешь руки и кого-то за что-то хватаешь. И ты хочешь узнать, кого и за что ты схватил. Это и есть описанная тобой ситуация.

По технологии, аналогичной COM, ты можешь попросить того, кого ты схватил, подставить тебе уши. Он подставляет, ты хватаешь, орешь, и, опять-же, удовлетворенный, уходишь.
Зачем тебе знать - что держат твои руки, если ты пришел с определеной целью?

Иными словами, для решения задачи "наорать и уйти" нет нужды знать - за что ты держишся.

Задачу можно решить только двумя способами:
  1. Придти днем, схватить осла за уши, и сделать свое дело.
  2. Придти ночью, схватить осла за что придется, попросить подставить уши, и опять-же сделать свое дело.
Только так осел уйдет ошеломленный, а ты - удовлетворенный.

P.S. Осел - это компонент. Уши, хвост, ноги и пр. части осла - это интерфейсы.

Rambler's Top100