AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 09.04.2003, 18:46   #1  
Fedor ist offline
Fedor
Участник
 
13 / 11 (1) +
Registriert seit: 28.01.2003
:( Binary -> Container
Коллеги, не поможете с проблемкой? - хочу запихать класс Binary в Container.

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

Кроме как в поле типа Container такие данные, вроде как, не пихнешь. Казалось бы пихни Binary в Container и задача решена, а вот как это сделать?
Alt 09.04.2003, 18:52   #2  
Garic ist offline
Garic
NavAx
Benutzerbild von Garic
NavAx Club
 
393 / 63 (3) ++++
Registriert seit: 23.07.2002
Ort: Москва
Может это поможет

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

Работает в таком виде:
PHP-Code:
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;

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

Geändert von PMS (09.08.2006 um 18:13 Uhr)
Alt 09.08.2006, 17:59   #5  
PMS ist offline
PMS
Участник
 
54 / 29 (1) +++
Registriert seit: 25.02.2005
Ort: Санкт-Петербург
Да, кстати, копирование через строку
PHP-Code:
b.string(0bd.getStrData()); 
не пройдет, т.к. в данных есть спец. символы, а они в строке не сохраняются.
Alt 10.08.2006, 08:46   #6  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2494 (89) +++++++++
Registriert seit: 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
This post has been rated by: Corel (1).
Alt 10.08.2006, 10:51   #7  
PMS ist offline
PMS
Участник
 
54 / 29 (1) +++
Registriert seit: 25.02.2005
Ort: Санкт-Петербург
AndyD, спасибо.

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

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

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

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

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

Geändert von PMS (10.08.2006 um 11:44 Uhr)
Alt 10.08.2006, 11:58   #10  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2494 (89) +++++++++
Registriert seit: 20.08.2005
Может я чего-то пропустил, но что такое "заранее заполненный контейнер _c"?
Как вы его получаете?
__________________
Axapta v.3.0 sp5 kr2
Alt 10.08.2006, 12:06   #11  
PMS ist offline
PMS
Участник
 
54 / 29 (1) +++
Registriert seit: 25.02.2005
Ort: Санкт-Петербург
Я имел ввиду, что контейнер передается в метод из поля таблицы, а загружается он туда (в таблицу) из файла.

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 18:54 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.