От: | Vi2 | http://www.adem.ru | |
Дата: | 25.06.03 09:51 | ||
Оценка: |
Параметр может быть как указателем на SAFEARRAY, так и просто VARIANT. Это зависит от описания метода, а не от того, что передают. Массив можно передать и так и так.А>У меня проблема в том, что метод COM сервера принимает в качестве параметра массив естественно, нужно создать SAFEARRAY, как _variant_t
[] 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.А>Можно ли как-то создать массив именно вариантовых переменных и передать его серверу, чтобы он там все нормально понял?