Поиск:

Ответ в темуСоздание новой темы Создание опроса
> может ли "биться" SafeArray? 
:(
    Опции темы
_hunter
  Дата 16.8.2005, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



проблема такая:
есть некая COM-dll-ка ( на делфи писаная ( если это значение имеет ) )
она отдает SafeArray:
Код

procedure Calc.SomeProcedure(out SA: PSafeArray);
var
    bounds: SAFEARRAYBOUND;
    i: integer;
    idx: array[0..0] of integer;
    xxx: double;
begin
  bounds.cElements := 36;
  bounds.lLbound := 0;
  SA := SafeArrayCreate(varDouble, 1, bounds);

  for i := 0 to 35 do
  begin
    idx[0] := i;
    SafeArrayPutElement(SA, idx, i);
    SafeArrayGetElement(SA, idx, xxx);

    s := s + IntToStr(i) + ': ' + FormatFloat('0.##', xxx) + #10#13;
  end;
  ShowMessage(s);
end;

( код немного покоцанный, но смысл -- тот )

потом в билдере я вызываю эту процедуру и получаю массив:

Код

    LPSAFEARRAY SA = NULL;
    FCalcSrv.SomeProcedure(&SA);

    //потом работаю с ним:
    double DValue;
    for (long i = 0; i < 36; i++)
    {
        SafeArrayGetElement(SA, &i, &DValue);
        stringGrid->Cells[1][i] = FormatFloat("0.##", DValue);
        //и вот тут начинается самое интересное -- значения в таблице не такие как должны быть -- просто нули и одно/два правильных значения
    }


вот мне и интересно -- толи я туплю не по детски, то ли лыжи не едут...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гвоздь
Дата 16.8.2005, 20:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Попробуйте
Код

STDMETHOD CoIBla::GetArray(VARIANT v)
{
    if((v.vt & VT_ARRAY) && (v.vt & VT_R8))
    {
        SAFEARRAY *pSA = v.parray;

        double *pdbl = NULL;

        SafeArrayAccessData(pSA, (void**)&pdbl);

        for(int i = 0; i < pSA->rgsabound->cElements; i++)
        {
            ....pdbl[i];
        }

        SafeArrayUnaccessData(pSA);
    }

    return S_OK;
}

  Вверх
_hunter
Дата 16.8.2005, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



и куда это совать? в длл-ку? ( забыл сказать: она не моя )
в свой модуль? так длл-ка отдает SAFEARRAY**


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
JoyEx
Дата 17.8.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: 1
Всего: 12



Может так?
Код

double * pDValue = NULL;

SafeArrayGetElement(,, &pDValue)



--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
_hunter
Дата 17.8.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



нет. и тогда уже:
SafeArrayGetElement(,, pDValue) smile


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Guest
Дата 19.8.2005, 08:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











stdcall, pascal, safecall, fastcall и т.д. ?? может это smile
(очень похоже)
  Вверх
_hunter
Дата 19.8.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



тоже вряд ли -- функция из TLB-хи...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
JoyEx
Дата 20.8.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: 1
Всего: 12



_hunter
А клиент из VBA может работать с этим SafeArray?


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
_hunter
Дата 22.8.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



напрямую нет -- только через варианты ( хотя при чем тут это? smile )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
JoyEx
Дата 25.8.2005, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: 1
Всего: 12



Цитата(_hunter @ 22.8.2005, 10:01)
напрямую нет -- только через варианты ( хотя при чем тут это?  )

Значит сервер правильно работает. Ошибка у твоего C++ клиента.
_hunter, помог бы, но вот не знаю чем smile


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.