Показать сообщение отдельно
Старый 08.11.2010, 10:04   #3  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Для нулевого символа окончания строки место надо выделять.

Кстати, у меня в 3.0 KR2 тоже ругается
Согласен. Тем не менее в ранней версии как то работало без этого.
Написал функцию, которая решает данную проблему. Идея в том что в binary "штатно" вставляется n-1 символов, а окончательный символ вставляется как binary.byte(...). Таким образом возможно получить binary того же размера что и длина текста, который необходимо поместить в binary. (Сформированный таким образом binary передается на вход функции внешней DLL, для которой этот binary является структурой данных с строго заданным смещением...)
Может быть кому то окажется полезным...

X++:
static client server void binary_String(binary _binary, str _value, int _binaryStrLen, int _offset)
{
    // функция для того чтобы обойти баг ? невозможности вставить n символов в bynary размером n байт
    binary  tmpBinary; //для преобразования char2num в не unicode код
    ;
    if (strLen(_value) >= _binaryStrLen)
    {
        tmpBinary = new binary(2);
        tmpBinary.string(0, subStr(_value, _binaryStrLen, 1));

        _binary.string(_offset, subStr(_value, 1, _binaryStrLen - 1));
        _binary.byte((_offset + _binaryStrLen) - 1, tmpBinary.word(0));
    }
    else
    {
        _binary.string(_offset, _value);
    }
}