20.09.2010, 12:13 | #7 |
NavAx
|
Подкинули задачку, как выяснилось, она решаема. Написано это все для 3ки, для 4ки и 2009 есть смысл использовать класс BinData - там все проще.
Так вот. Неважно, в каком виде мы помещаем в массив значения, то ли Types::Enum, то ли Types::Integer. Главное - как мы потом запихнем это в правильно инициализированный Variant. CreateFromArray - не подходит, т.к. проблема на самом деле в том, что createFromArray всегда формирует SafeArray из VT_I4(если мы передаем числовые типы, если строки - то будет VT_BSTR), в результате чего, сервер получает значения "расширенные" 3мя нулями и у него сносит крышу (пропадают спецсимволы и вообще, творится армагеддон ). Надо брать метод safeArray, позволяющий указать тип получаемого SaleArray (а нам нужен, по сути, массив байт). Так и пишем: X++: str string = "+1&2+3&4"; COMVariant cv; Array ar = new Array(Types::Enum); //или Types::Integer int i; for (i=1;i<strlen(string);i++) { ar.value(i, char2num(string, i)); } cv = new ComVariant(COMVariantInOut::Out, COMVariantType::VT_SAFEARRAY); cv.safeArray(ar, COMVariantType::VT_I1);
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... Последний раз редактировалось Maximin; 20.09.2010 в 13:07. |
|
|
За это сообщение автора поблагодарили: Hyper (1). |
Теги |
activex, com-объект, internet explorer |
|
|