Здравствуйте George_Seryakov, Вы писали:
GS>Как поизящнее сделать запрос к свойству "0", располагая только диспатчем? Может, есть какой специальный интерфейс, который поддерживается жавовскими массивами?
Про интерфейс не знаю, пока не нашел. И использую пока так:
....
wsprintf(szTemp, "%ld", lIndex);
MultiByteToWideChar(CP_ACP, NULL, szTemp, -1, pszPropertyIndex, BUFF_SIZE);
hr = GetProperty(pDispatchEx, pszPropertyIndex, &vtPropertyValue);
....
Либо, если массив не большой и долго с ним надо работать — копировать в safearray
Здравствуйте Мокроусов Дмитрий, Вы писали:
Vi2>>свойство "0" — имеется в виду свойство по умолчанию? Тогда это DISPID_VALUE или 0.
МД>нет свойства "0","1"... индексы массива
Если ты обращаешься к
свойству по умолчанию и передаёшь "0","1" ..., то это означает, что оно (это свойство) переводит твои строки в числа и использует по назначению, если только она не использует строки для поиска по имени. Вот пример:
Dim a(3) As Long, v
a(1) = 1
v = a("1")
Так же работает любая коллекция со строками, если она использует числа для нумерации своих членов:
[id(0),propget] HRESULT Item([in] VARIANT Index, [out, retval] return_type *pVal);
А то, что массивы (или что-то там у вас) не работают с
именами в виде "0","1" ..., это очевидно из того, что это имя не может быть использовано отдельно от этого метода, т.е. нельзя использовать
obj.0,
obj.1 ...
Я могу использовать
CallByName pObj, "name" также как и
pObj.Name, и говорить, что объект "pObj" обладает свойством "Name".