Russian Qt Forum

Компиляторы и платформы => Visual C++ => Тема начата: SCAD от Апрель 13, 2004, 16:55



Название: Как передать массив в качестве аргумента COM функции
Отправлено: SCAD от Апрель 13, 2004, 16:55
Существует такая проблема. Пишу COM библиотеку на VC6 там одной функции надо передать в качестве аргумента массив чисел (double). Если написать аргумент типа double*, то VC-ные клиенты спокойно передайют массив, а вот VBA-шные видят этот аргумент как одно число типа double. Пробовал делать аргумент типа VARIANT* , но не удается выцепить значения(double) из указателя. Как быть? Если не трудно бросьте кусок кода.


Название: Как передать массив в качестве аргумента COM функции
Отправлено: SCAD от Апрель 14, 2004, 09:54
Отвечаю сам себе... Может кому еще пригодиться
Код:

TDMETHODIMP CFUNC::set(long s, VARIANT d, VARIANT t)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())

// Чило занчений в двух массивах
points=s;
        //double *t, *p;
t=(double*)(d.parray->pvData);
p=(double*)(d.parray->pvData);
return S_OK;
        //Теперь t и p - массивы аргументов
}


Название: Как передать массив в качестве аргумента COM функции
Отправлено: EugeneVC от Апрель 14, 2004, 10:05
тоесть они указатели принимают?


Название: Как передать массив в качестве аргумента COM функции
Отправлено: SCAD от Апрель 14, 2004, 12:09
Да! Причем указатели на место в памяти, где храняться ЗНАЧЕНИЯ а не всякая там лабудень, что идет c VARIANT- ом


Название: Как передать массив в качестве аргумента COM функции
Отправлено: EugeneVC от Апрель 14, 2004, 13:21
а интересно если сервер на другой машине и память другая ?
или я че туплю


Название: Как передать массив в качестве аргумента COM функции
Отправлено: SCAD от Апрель 14, 2004, 13:57
А вот эти проблемы должен решить сам механизм COM/DCOM. А с практической точке зрнеия в твоей программе ничего не меняется


Название: Как передать массив в качестве аргумента COM функции
Отправлено: Злой от Апрель 20, 2004, 18:42
Для пердачи массивов в COM используется вариант, который хранит массив вариантов. См. в MSDN описание функций
SafeArrayCreate
SafeArrayCreateEx
и т.д.


Название: Как передать массив в качестве аргумента COM функции
Отправлено: SCAD от Апрель 22, 2004, 08:34
Цитата: "Злой"
Для пердачи массивов в COM используется вариант, который хранит массив вариантов. См. в MSDN описание функций
SafeArrayCreate
SafeArrayCreateEx
и т.д.

Кусок кода который я привел как раз и работает по этому механизму. Из MSDN-а он и взят. я думаю тема закрыта ;)