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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.04.2003, 18:46   #1  
Fedor is offline
Fedor
Участник
 
13 / 11 (1) +
Регистрация: 28.01.2003
:( Binary -> Container
Коллеги, не поможете с проблемкой? - хочу запихать класс Binary в Container.

Задача в следующем - внешняя DLL возвращает бинарные данные в классе Binary. Необходимо запихнуть эти данные в таблицу.

Кроме как в поле типа Container такие данные, вроде как, не пихнешь. Казалось бы пихни Binary в Container и задача решена, а вот как это сделать?
Старый 09.04.2003, 18:52   #2  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
Может это поможет

http://www.axforum.info/forums/showt...1009#post11009
__________________
С уважением, Игорь Ласийчук.
Старый 09.04.2003, 19:02   #3  
Fedor is offline
Fedor
Участник
 
13 / 11 (1) +
Регистрация: 28.01.2003
К сожалению....
К сожалению не поможет, так как там используется класс BinData.
Он, несмотря на похожее название, никак не пересекается с классом Binary.
Старый 09.08.2006, 17:49   #4  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Я столкнулся с такой же проблемой. Только хочу наоборот container преобразовать в Binary.

Работает в таком виде:
PHP код:
Binary con2Binary(container _c)
{
    
BinData         bd = new BinData();
    
Binary           b;
    
int                 i;
    
int                 num;
    ;

    
bd.setData(_c); //тут уже заранее заполненный контейнер _c

    
num bd.getVariant().safeArray().lastIndex();

    
= new Binary(num+1);

    for(
i=1i<(num+1); i++)
        
b.byte(i-1bd.getVariant().safeArray().value(i));

    return 
b;

Неужели нет более лаконичного решения? (работает очень долго)
Может у кого-нибудь есть идеи?

Последний раз редактировалось PMS; 09.08.2006 в 18:13.
Старый 09.08.2006, 17:59   #5  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Да, кстати, копирование через строку
PHP код:
b.string(0bd.getStrData()); 
не пройдет, т.к. в данных есть спец. символы, а они в строке не сохраняются.
Старый 10.08.2006, 08:46   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Во-первых, самый простой способ ускорить вашу процедуру
X++:
Binary con2Binary(container _c)
{
    BinData         bd = new BinData();
    Binary           b;
    int                 i;
    int                 num;
    Array            SafeArray;
    ;

    bd.setData(_c); //тут уже заранее заполненный контейнер _c

    SafeArray = bd.getVariant().safeArray();
    num = SafeArray.lastIndex();

    b = new Binary(num+1);

    for(i=1; i<(num+1); i++)
        b.byte(i-1, SafeArray.value(i));

    return b;
}
Во-вторых, можно сделать так
X++:
str s;
;
s = BinData::dataToString(_c);
// в результате в s - строка, представляющая в шестнадцатиричном виде 
// данные контейнера (071d и т.д.) с разделителями между строками \n
// В цикле пробегаете по строке, преобразовываете двойки в числа hex2int()
// и сохраняете в Binary
В-третьих, а зачем вам именно контейнер засовывать в Binary? Не проще ли данные вставлять непосредственно в него?
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Corel (1).
Старый 10.08.2006, 10:51   #7  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
AndyD, спасибо.

Способ "Во-первых" действительно ускорил работу с 10 секунд до практически мгновенно (глазом не заметно).

Способ "Во-вторых" тоже хороший.

Цитата:
Сообщение от AndyD
... а зачем вам именно контейнер засовывать в Binary? Не проще ли данные вставлять непосредственно в него?
Массив Binary мне нужен для передачи в WinAPI функцию, а данные удобно хранить в таблице, а значит в контейнере (можно конечно в файле, но мне кажется, что удобнее в таблице). Вот здесь и возникает задача преобразовать контейнер в Binary массив.

Меня все-таки удивляет вот что. Есть класс Binary и есть класс BinData. Вроде бы одно и тоже, но похоже, что прямого пути передачи данных между объектами этих классов нет...
Старый 10.08.2006, 10:56   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Дело в том, что при сохранении в BinData к самим данным дополнительно добавляется служебная информация - идентификатор контейнера, типы данных, размеры контенера и т.д. Не припомню в WinApi функций, которые бы понимали эти данные.
__________________
Axapta v.3.0 sp5 kr2
Старый 10.08.2006, 11:41   #9  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от AndyD
Дело в том, что при сохранении в BinData к самим данным дополнительно добавляется служебная информация - идентификатор контейнера, типы данных, размеры контенера и т.д. Не припомню в WinApi функций, которые бы понимали эти данные.
Так в WinAPI должен передаваться Binary а не BinData. И проблема как раз в том как преобразовать BinData в Binary.

В BinData служебная информация в сами данные не добавляется. Во всяком случае, при побайтовом копировании они не вылезают.

Последний раз редактировалось PMS; 10.08.2006 в 11:44.
Старый 10.08.2006, 11:58   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Может я чего-то пропустил, но что такое "заранее заполненный контейнер _c"?
Как вы его получаете?
__________________
Axapta v.3.0 sp5 kr2
Старый 10.08.2006, 12:06   #11  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Я имел ввиду, что контейнер передается в метод из поля таблицы, а загружается он туда (в таблицу) из файла.

Последний раз редактировалось PMS; 10.08.2006 в 12:11.
Старый 10.08.2006, 12:43   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А файл. Тогда прокатит.
Я думал, что речь идет об обычном контейнере с произвольным количеством элементов.
__________________
Axapta v.3.0 sp5 kr2
Старый 10.08.2006, 13:08   #13  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Да, да, конечно, я забыл сказать, что в контейнере лежит один объект - файл.
Старый 24.04.2014, 15:22   #14  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
удалось решить? я пока вижу выход только через биндата сохранить в файл а после через winapi влить обратно в binary- но нужно искать более быстрый способ
Старый 24.04.2014, 15:51   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А вот это не то?
X++:
BinData.setBinaryData(Binary);
Старый 26.04.2014, 16:29   #16  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
так set вроде как вносит данные или я не прав и она может не только вносить но и выводить? попробую конечно, но чет не верится
Старый 28.04.2014, 10:59   #17  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
как и говорил set не катит, но катит base64
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
container -> image ta_and DAX: Программирование 9 15.07.2008 12:31
gatesasbait: Quicksort on a container Blog bot DAX Blogs 1 16.12.2007 13:35
axaptapedia: Container Blog bot DAX Blogs 0 06.03.2007 00:33
Dynamics AX Geek: Storing objects in a container Blog bot DAX Blogs 0 28.10.2006 16:40
Binary in Axapta BorDark DAX: Программирование 6 01.09.2004 19:08

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

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

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