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



         

Маршалер свободной поточной обработки (FreeThreaded Marshaler) - часть 10


};

#def1ne LIP(Itf) LocalInterfacePointer<Itf, &IID_##Itf>

С получением этого второго класса C++ обработка импортированных указателей становится намного проще:

STDMETHODIMP SafeRect::get_Area(long *pn) { long top, left, bottom, right; HRESULT hr, hr2; // import pointers // импортируем указатели LIP(IPoint) lipTopLeft(m_gipTopLeft, hr); LIP(IPoint) lipBottomRight(m_gipBottomRight, hr2); assert(SUCCEEDED(hr) && SUCCEEDED(hr2)); // use temp tocal pointers // используем временные локальные указатели hr = lipTopLeft->GetCoords(&left, &top); hr2 = lipBottomRight->GetCoords(&right, &bottom); assert(SUCCEEDED(hr) && SUCCEEDED(hr2)); *pn = (right - left) * (bottom - top); return S_OK; // LocalInterfacePointer auto-releases temp ptrs. // LocalInterfacePointer сам освобождает // временные указатели }

Макросы GIP и LIP делают совместное использование GIT и FTM намного менее громоздким. До появления GIT использование FTM в классе с интерфейсными указателями было значительно более трудным, чем теперь обеспечивает любой из кодов, приведенных в данном разделе.




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