Цитата:
Сообщение от
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);
}
}