Re[10]: [out] не возвращается значение
От: Мокроусов Дмитрий Россия  
Дата: 09.08.02 07:04
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Как поизящнее сделать запрос к свойству "0", располагая только диспатчем? Может, есть какой специальный интерфейс, который поддерживается жавовскими массивами?


Про интерфейс не знаю, пока не нашел. И использую пока так:

        ....
    wsprintf(szTemp, "%ld", lIndex);
    MultiByteToWideChar(CP_ACP, NULL, szTemp, -1, pszPropertyIndex, BUFF_SIZE);
    hr = GetProperty(pDispatchEx, pszPropertyIndex, &vtPropertyValue);
        ....


Либо, если массив не большой и долго с ним надо работать — копировать в safearray
Re[11]: [out] не возвращается значение
От: Мокроусов Дмитрий Россия  
Дата: 09.08.02 07:09
Оценка:
Здравствуйте Vi2, Вы писали:

Vi2>А что забавного? Просто массивы, наверное, простая надстройка над Safe Array-ями — всё-таки у нас нет точной информации о внутренней реализации, но по внешнему поведению массив в VB — "обычная" коллекция со свойством по умолчанию и нумератором:


Скорее всего в VB массивы надстройка над safearray

GS>>Как поизящнее сделать запрос к свойству "0", располагая только диспатчем?

Vi2>свойство "0" — имеется в виду свойство по умолчанию? Тогда это DISPID_VALUE или 0.

нет свойства "0","1"... индексы массива
Re[12]: [out] не возвращается значение
От: Vi2 Удмуртия http://www.adem.ru
Дата: 09.08.02 07:23
Оценка:
Здравствуйте Мокроусов Дмитрий, Вы писали:

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".
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[13]: [out] не возвращается значение
От: Мокроусов Дмитрий Россия  
Дата: 09.08.02 08:09
Оценка:
Здравствуйте Vi2, Вы писали:

Согласен, просто я зациклился на своих массивах
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.