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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.06.2010, 15:10   #1  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Баг в классе SysPDFFontType2 (формирование PDF)
AX 2009 5.0.1500.1313

Столкнулся с тем, что один из отчетов отказывался печататься в pdf-файл, выдавая ошибку "Attempting to read illegal array index." в методе getCMap класса SysPDFFontType2.
В строке "widthsC.value(charIdx, any2int(( cValue*72 + (pixPerInchX>>1))/ pixPerInchX))" charIdx был равен 0.

Для решения проблемы необходимо заменить строку
X++:
            if (res != 0xFFFFFFFF)
на
X++:
            if (res != -1)

Вообще интересно, что следующие строки выдают разный результат:
X++:
info(strfmt("%1", hex2int("FFFFFFFF")));    // -1
info(strfmt("%1", 0xFFFFFFFF));             // 4294967295
Старый 15.06.2010, 15:15   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Хе-хе. А не есть ли число 4294967295 предельным для 32 разрядного int?

С Уважением,
Георгий
Старый 15.06.2010, 15:55   #3  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
поменяйте типы в методе hex2int() с int на int64, или создайте новый метод hex2int64()
Старый 15.06.2010, 16:13   #4  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от ice Посмотреть сообщение
поменяйте типы в методе hex2int() с int на int64, или создайте новый метод hex2int64()

Проблема-то при этом в классе SysPDFFontType2 не исчезнет, все равно код править надо.
Старый 15.06.2010, 16:19   #5  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от George Nordic Посмотреть сообщение
А не есть ли число 4294967295 предельным для 32 разрядного int?

X++:
info(strfmt("%1", 0xFFFFFFFFFFFFFFF));  // 1152921504606846975
info(strfmt("%1", 0x7FFFFFFFFFFFFFFF)); // 9223372036854775807
Старый 15.06.2010, 16:26   #6  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Hyper Посмотреть сообщение
Проблема-то при этом в классе SysPDFFontType2 не исчезнет, все равно код править надо.
у переменной res поменять тип
Старый 15.06.2010, 17:49   #7  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от ice Посмотреть сообщение
у переменной res поменять тип

Нельзя. На этой строчке ругается.
X++:
    res = WinAPINative::getFontUnicodeRanges(dc, glyphSet);
Теги
bug, pdf, баг, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
create Pdf invoice report DmitrySincerity DAX: Программирование 1 25.03.2009 17:27
Баг в системном классе SysOperationProgressBase. Hyper DAX: Прочие вопросы 0 19.03.2009 18:58
Баг (?) в классе LedgerBalanceDim Peter Savintsev DAX: Программирование 3 18.06.2008 05:41
C# and AX Development: Printing directly to PDF in AX Blog bot DAX Blogs 0 18.03.2008 03:14
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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