Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: COM-server & VB-client  (Прочитано 6621 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FantomCat
Гость
« : 19-09-2003 15:48 » 

Здавствуйте!
Люди, помогите пожалуйста!
У меня такая трабла. Есть у меня мой СОМ-сервер. Один из его методов возвращает массив VARIANT'ов. В идле этот кусок прототипа выглядит так
HRESULT GetData([in]TDat tab,[in,string]char* fields,[out]int *rows,[out]int *total, [out,size_is(,*total)] VARIANT **pArr);
В срр-клиенте все работает просто прекрасно. Но есть у этого сервера и бейсиковский клиент, и вот бейсик на VARIANT **pArr ругается, как на неподдерживаемый тип (именно на это! Проверено множеством способов).
Я уже для бейсиковского клиента другой интерфейс завела, чтобы память клиент аллокатил, ну и прототип немного другой стал
HRESULT GetData([in]int total,[out,size_is(total)]VARIANT *pArr);
В басиковской проге нормально делаю Dim (ReDim).
Но в этом случае я ничего в сервере не могу сделать ни с каким элементом массива, вылетает с Automatization error.

Так вот даже если сделать этот массив входным, сервер не может продуплить с типами вариантов, ну и соответственно с последствиями.

Просто указатель на вариант замечательно маршалится, как на вход, так и на выход.

Люди! Помогите, плз! Ну хотя бы идеями! Два дня лбом об монитор стукаюсь.

З.Ы.
Если в идле сделать
typedef VARIANT VARARR[500];//хотя размер может у меня быть как    намного больше, так и намного меньше.(в общем низзя так)
то опять вылетает с неподдерживаемым типом 8-(
Записан
NetRaider
Гость
« Ответ #1 : 19-09-2003 22:43 » 

Покажи idl и VB код, где происходит объявление массива и вызов метода. А "Automatization error" в каком месте вылетает ? и что возвращает GetLastError() ?
Записан
FantomCat
Гость
« Ответ #2 : 20-09-2003 09:27 » new

Зашибиться можно!
Ненавижу прикладнуху! И особенно хорошо это понимаю, когда проблема разрешилась.
В idl все было нормально. А вот басику при вызове метода оказывается нужно было передавать 0-й элемент массива!
Зачем же так указатели прятать?!  Молчу

NetRaider, спасибо тебе большое за отзывчивость! Круто!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines