Re: _variant_t как массив но не SAFEARRAY
От: Vi2 Удмуртия http://www.adem.ru
Дата: 25.06.03 09:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня проблема в том, что метод COM сервера принимает в качестве параметра массив естественно, нужно создать SAFEARRAY, как _variant_t

Параметр может быть как указателем на SAFEARRAY, так и просто VARIANT. Это зависит от описания метода, а не от того, что передают. Массив можно передать и так и так.

[] HRESULT MethodViaSAFEARRAY([in] SAFEARRAY(VARIANT) p); // Не принимает VB, а так - нормально.
[] HRESULT MethodViaSAFEARRAY([in] SAFEARRAY(VARIANT) *p);
[] HRESULT MethodViaVARIANT([in] VARIANT p); // p.vt == VT_ARRAY | VT_VARIANT

А>Но у меня проблема в том, что типы данных в этом массиве могут быть разные, а SAFEARRAY требует чтобы для всех значений тип был один.

Это правильно — тип элементов в массиве всегда один. Хоть в С/С++, хоть в СОМе.

А>Можно ли как-то создать массив именно вариантовых переменных и передать его серверу, чтобы он там все нормально понял?

Для этого и существует массив Вариантов — SAFEARRAY(VARIANT), т.е. тип каждого элемента VT_VARIANT.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.