Сущность технологии COM



License received: blockchain casino! The Edgeless

Моникеры и композиция - часть 3


Эта реализация означает, что такой код:

HRESULT GetUrsus(IApe *&rpApe) { const OLECHAR pwsz[] = OLESTR("clsid:571F1680-CC83-11d0-8C48-0080C73925BA:!Ursus"); return CoGetObject(pwsz, 0, IID_IApe, (void**)&rpApe); }

эквивалентен следующему:

HRESULT GetUrsus(IApe *&rpApe) { IOleItemContainer *poic = 0; HRESULT hr = CoGetClassObject(CLSID_Gorilla, CLSCTX_ALL, 0, IID_IOleItemContainer, (void**)&poic); if (SUCCEEDED(hr)) { hr = poic->GetObject(OLESTR("Ursus"), BINDSPEED_INFINITE, 0, IID_IApe, (void**)&rpApe); poic->Release(); } return hr; }

Отметим, что уровень изоляции (indirection), обеспеченный использованием CoGetObject, позволяет клиенту менять стратегию связывания просто путем чтения различных отображаемых имен из файла конфигурации или из ключа реестра.




Содержание  Назад