25.09.2008, 19:20 | #6 |
Участник
|
Если это запрос через COM-объекты, то попробуй принимать значения как тип ComVariant
X++: ComVariant retVal; ; retVal = Choose.(); // Если ожидается значение типа int print retVal.int(); pause; // Если ожидается значение типа str print retVal.bStr (); pause; Вот выдрал метод по преобразованию типов ComVariant из своего класса на Ax2.5 X++: // Преобразование полученного значения anyType getValue(ComVariant _comVariant) { // Com comValue; ; switch (_comVariant.variantType()) { case COMVariantType::VT_BOOL : return _comVariant.boolean(); // boolean case COMVariantType::VT_BSTR : return _comVariant.bStr(); // str case COMVariantType::VT_UI1 : return _comVariant.byte(); // int case COMVariantType::VT_I1 : return _comVariant.char(); // int case COMVariantType::VT_CY : return _comVariant.currency(); // real case COMVariantType::VT_DATE : return _comVariant.date(); // date case COMVariantType::VT_DECIMAL : return _comVariant.decimal(); // real case COMVariantType::VT_R8 : return _comVariant.double(); // real case COMVariantType::VT_R4 : return _comVariant.float(); // real case COMVariantType::VT_DISPATCH : // return _comVariant.iDispatch(); // дескриптор COM-интерфейса. Число. return COM::createFromVariant(_comVariant); // Преобразую в ссылку на объект case COMVariantType::VT_I4 : // int return _comVariant.int(); // return _comVariant.long(); // теоретически, это должно быть VT_I8, но такого значения нет, поэтому VT_I4 читается как int() case COMVariantType::VT_UNKNOWN : //return _comVariant.iUnknown(); // дескриптор COM-интерфейса. Число. return COM::createFromVariant(_comVariant); // Преобразую в ссылку на объект case COMVariantType::VT_ERROR : return _comVariant.sCode(); // int case COMVariantType::VT_I2 : return _comVariant.short(); // int case COMVariantType::VT_UI4 : return _comVariant.uInt(); // int //return _comVariant.uLong(); // теоретически, это должно быть VT_UI8, но такого значения нет, поэтому VT_I4 читается как int() case COMVariantType::VT_UI2 : return _comVariant.uShort(); // int case COMVariantType::VT_VARIANT : return _comVariant.variant(); // COMVariant case COMVariantType::VT_SAFEARRAY : return _comVariant.safeArray(); // array default : throw error(strFmt("Неизвестны правила обработки типа %1", _comVariant.variantType())); } } |
|
|
За это сообщение автора поблагодарили: niktata (1). |