Russian Qt Forum
Ноябрь 22, 2024, 19:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как передать массив в качестве аргумента COM функции  (Прочитано 8437 раз)
SCAD
Гость
« : Апрель 13, 2004, 16:55 »

Существует такая проблема. Пишу COM библиотеку на VC6 там одной функции надо передать в качестве аргумента массив чисел (double). Если написать аргумент типа double*, то VC-ные клиенты спокойно передайют массив, а вот VBA-шные видят этот аргумент как одно число типа double. Пробовал делать аргумент типа VARIANT* , но не удается выцепить значения(double) из указателя. Как быть? Если не трудно бросьте кусок кода.
Записан
SCAD
Гость
« Ответ #1 : Апрель 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 - массивы аргументов
}
Записан
EugeneVC
Гость
« Ответ #2 : Апрель 14, 2004, 10:05 »

тоесть они указатели принимают?
Записан
SCAD
Гость
« Ответ #3 : Апрель 14, 2004, 12:09 »

Да! Причем указатели на место в памяти, где храняться ЗНАЧЕНИЯ а не всякая там лабудень, что идет c VARIANT- ом
Записан
EugeneVC
Гость
« Ответ #4 : Апрель 14, 2004, 13:21 »

а интересно если сервер на другой машине и память другая ?
или я че туплю
Записан
SCAD
Гость
« Ответ #5 : Апрель 14, 2004, 13:57 »

А вот эти проблемы должен решить сам механизм COM/DCOM. А с практической точке зрнеия в твоей программе ничего не меняется
Записан
Злой
Гость
« Ответ #6 : Апрель 20, 2004, 18:42 »

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

Цитата: "Злой"
Для пердачи массивов в COM используется вариант, который хранит массив вариантов. См. в MSDN описание функций
SafeArrayCreate
SafeArrayCreateEx
и т.д.

Кусок кода который я привел как раз и работает по этому механизму. Из MSDN-а он и взят. я думаю тема закрыта Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 22.