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



         

Динамический вызов в сравнении со статическим - часть 2


// can the object describe this interface? // может ли объект описать этот интерфейс? HRESULT GetTypeInfoCount([out] UINT * pctinfo);

// return a locale-specific description of this interface // возвращаем специфическое для данной локализации описание этого интерфейса HRESULT GetTypeInfo( [in] UINT itInfo, // reserved, m.b.z. // зарезервировано, должно равняться нулю [in] LCID lcid, // locale ID // код локализации [out] ITypeInfo ** ppTInfo); // put it here! // помещаем это здесь!

// resolve member/parameter names to DISPIDs // преобразовываем имена членов/параметров в DISPID HRESULT GetIDsOfNames( [in] REFIID riid, // reserved, must be IID_NULL // зарезервировано, должно равняться IID_NULL [in, size_is(cNames)] LPOLESTR * rgszNames, // method+params // метод + параметры [in] UINT cNames, // count of names // количество имен [in] LCID lcid, // locale ID // локальный ID [out, size_is(cNames)] DISPID * rgid // tokens of names // маркеры имен );

// access member via its DISPID // обращаемся к члену через его DISPID HRESULT Invoke( [in] DISPID id, // token of member // маркер члена [in] REFIID riid, // reserved, must be IID_NULL // зарезервировано, должно равняться IID_NULL [in] LCID lcid, // locale ID // локальный ID [in] WORD wFlags, // method, propput, or propget? // метод propput или propget? [in,out] DISPPARAMS * pDispParams, // logical parameters // логические параметры [out] VARIANT * pVarResult, // logical result // логический результат [out] EXCEPINFO * pExcepInfo, // IErrorInfo params // параметры IErrorInfo [out] UINT * puArgErr // used for type errors // использовано для ошибок типа );

Когда машина сценариев впервые пытается обратиться к объекту, она использует QueryInterface для запроса интерфейса IDispatch этого объекта. Если объект отклоняет запрос QueryInterface, то машина сценариев этот объект использовать не может. Если же объект успешно возвращает свой интерфейс IDispatch машине сценариев, то машина будет использовать метод GetIDsOfNames этого объекта для перевода имен методов и свойств в маркеры.


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