03.11.2010, 19:24 | #1 |
Участник
|
Ошибка при работе с binary в Ax2009
Столкнулся с неожиданной проблемой в работе с binary.
Код, который ранее работал в ax 3.0 sp3: X++: binary binary = new binary(3); str value = "123"; ; binary.string(0, value); Если исправить binary binary = new binary(4); - то все отрабатывает. (То есть увеличение размера binary на один дополнительный байт решает проблему). Но мне нужно чтобы размер binary был такой же как и количество символов в тексте, который я в него записываю. Интересно, это ошибка ядра, или так и было задумано ? |
|
03.11.2010, 20:18 | #2 |
Участник
|
Для нулевого символа окончания строки место надо выделять.
Кстати, у меня в 3.0 KR2 тоже ругается
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: someOne (1). |
08.11.2010, 10:04 | #3 |
Участник
|
Цитата:
Написал функцию, которая решает данную проблему. Идея в том что в 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); } } |
|
Теги |
binary, feature |
|
|