Подкинули задачку, как выяснилось, она решаема.
Написано это все для 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);
На выходе получим то, что нужно - массив двоичных однобайтовых данных, упакованный в SafeArray.