Сущность технологии СОМ. Библиотека программиста :: Бокс Дональд
Страница:
468 из 528
В таких средах в настоящее время невозможно использовать библиотеки типов или другие априорные средства для снабжения машины времени выполнения (runtime engine) описанием используемых интерфейсов. Это означает, что объекты сами должны помогать интерпретатору переводить исходный текст сценариев в содержательные вызовы методов.
Для того чтобы объекты быть использованы из интерпретирующих сред типа Visual Basic Script и JavaScript, СОМ определяет интерфейс, выражающий функциональность интерпретатора. Этот интерфейс называется IDispatch и определяется следующим образом:
[object, uuid(00020400-0000-0000-C000-000000000046)] interface IDispatch : IUnknown {
// structure to model a list of named parameters
// структура для моделирования списка именованных параметров
typedef struct tagDISPPARAMS { [size_is(cArgs)] VARIANTARG * rgvarg;
[size_is(cNamedArgs)] DISPID * rgdispidNamedArgs;
UINT cArgs; UINT cNamedArgs;
} DISPPARAMS;
// 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,
<
|< Пред. 466 467 468 469 470 След. >|