AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.09.2004, 14:11   #1  
BorDark is offline
BorDark
Участник
Аватар для BorDark
 
24 / 10 (1) +
Регистрация: 09.08.2004
Адрес: планета Земля
Binary in Axapta
Добрый день. Вот, нежданно-негаданно на ровном месте столкнулся с такой проблемой.
Работал с API функциями Crystal Report в Аксапте. Там некогторые функции принимают в качестве параметра структуры, которые я реализовывал, создавая класс binary и записывая в него с определнным смещением требуемые члены-данные структуры. И все типа
данных в аксапте как типы, кроме str. Он имеет в аксапте неограниченную длину, поэтому, когда я писал

static void Job3(Args _args)
{
binary bin = new binary(128);
int n = 666;
str 9 s = "123456789";
;

bin.word(10, n);
bin.string(0, s);
box::info(strfmt("%1", bin.Word(10)));
}
последний box выдавал 0. А, насколько я понимаю, должен был выдать 5.
Если заремить bin.string(0, s);, то все работает. Я так предполагаю, что это из-за того, что string просто затирает весь bin до конца. Никто не имеет никаких мыслей по сему поводу?
Я пробовал так ограничить стринг:

static void Job3(Args _args)
{
binary bin = new binary(128);
binary bin9 = new binary(9);
int n = 666;
str 9 s = "123456789";
;

bin.word(10, n);
bin9.string(0, s);
bin.binary(0, bin9);
box::info(strfmt("%1", bin.word(10))); // выдает 5 - павильно
box::info(strfmt("%1", bin.string(0))); // вместо строки какие-то закорлючки
}

Может кто-то подскажет, в чем может быть глюк? Или найдет другой способ вложить в binary строку, чтобы она не затерла все за собой? Ведь с bin.Word все замечательно работает. Может я просто не понимаю, как работает этот бинари?

Спасибо, о други!
Старый 01.09.2004, 14:17   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
строка содержит на 1 символ больше, чем объявлено.
В конце хранится терминирующий 0.
Т.е. число надо класть с 11 символа.

Без терминирующего 0 не строка, а массив символов.
Старый 01.09.2004, 14:23   #3  
BorDark is offline
BorDark
Участник
Аватар для BorDark
 
24 / 10 (1) +
Регистрация: 09.08.2004
Адрес: планета Земля
Да ведь проовал уже, и с 11, и с 100-го и с 1000-го, а результат тот же
Старый 01.09.2004, 14:32   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
BorDark, извините.

Вы размещаете строку с 0 байта. Поэтому у вас все правильно.
Это я протормозил.

А вот глюк похоже имеет место быть.
Если переставить строки местами

PHP код:
static void Job31(Args _args)
{
binary bin = new binary(128);
int n 666;
str 9 s "123456789";
int i;
;

bin.string(0s);
bin.word(10n);

for(
i=0i<15; ++i)
    
info(strfmt("%1 %2"ibin.byte(i)));


То все равботает правильно...
Обращайтесь к вашему партнеру или регистрируйте ошибку в сервисной системе, если вы сами являетесь партнером.

Обходной путь сейчас - устанавливать байты посимвольно.
Старый 01.09.2004, 15:47   #5  
BorDark is offline
BorDark
Участник
Аватар для BorDark
 
24 / 10 (1) +
Регистрация: 09.08.2004
Адрес: планета Земля
Эх
Если переставить строки, то число без проблем ложится по своему адресу. но у меня кадое смещение является полем структуры и устанавливать все последующие поля заново после изменения текстового члена структуры ой как не хочется, а поменять саму структуру я не могу - он регламентирована АПИ кристала репорта.
Я пробовал так

static void Job7(Args _args)
{
binary bin = new binary(16);
int n = 666;
str 9 s = "123456789";
int i;
char c;
;

bin.word (11, n);

for(i = 0; i <= 15; i++)
{
c = substr(s, i + 1, 1);
bin.string(i, c);
}
box::info(strfmt("%1", bin.Word(11))); // все равно 0
}

но ничего не добился.

А что Вы имеете ввиду под установкой байтов посимвольно?
Старый 01.09.2004, 16:55   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Эх
Цитата:
Изначально опубликовано BorDark
А что Вы имеете ввиду под установкой байтов посимвольно?
Примерно это и имел в виду.
только не надо пользоваться методом string

Вот это работает - проверено на Axapta 3.0 SP3
PHP код:
static void Job31(Args _args)
{
binary bin = new binary(128);
int n 666;
str 9 s "123456789";
int i;
int c;
;

//bin.string(0, s);
//bin.word(10, n);

for(0strlen(s); i++)
{
char2num(s1); // c = substr(s, i + 1, 1);
bin.byte(ic); //bin.string(i, c);
}
bin.byte(i,0); // Не забывайте терминальный 0

bin.word (11n);


for(
i=0i<15; ++i)
    
info(strfmt("%1 %2"ibin.byte(i)));


Старый 01.09.2004, 19:08   #7  
BorDark is offline
BorDark
Участник
Аватар для BorDark
 
24 / 10 (1) +
Регистрация: 09.08.2004
Адрес: планета Земля
Похоже, что больше ничего не остается
Да я, собственно, так и сделал уже, просто кривовато оно как-то, не по людски, получается
Ну, раз больше ничего не остается, буду использовать это.
Спасибо, mazzy, за внимание к теме и дельные советы.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 12.04.2007 16:10
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 22.11.2006 15:20
Axapta и Ин. языки SIRS DAX: Администрирование 4 01.03.2006 10:02
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:22.