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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.04.2014, 11:31   #1  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
Binary + Binary How?
Как сложить 3 binary в один?
По просторам интернета не нарыл, эксперементирую и ни чего не выходит. может кто поможет.

если кто знает методом побитового копирования через for - не предлагайте

пробую RtlMoveMemory так же не выходит. чего туда сувать для копирования хз(вернее чего сувать знаю , но как получить это не знаю)
Старый 16.04.2014, 11:50   #2  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
А зачем вы это делаете, что на входе, и что на выходе получить хотите - не поделитесь?

И версия еще Аксапы какая, да..

А так - вот это можно посмотреть, к примеру : http://msdn.microsoft.com/en-us/libr...(v=ax.50).aspx
__________________
Best Regards,
Roman

Последний раз редактировалось RVS; 16.04.2014 в 11:58.
Старый 16.04.2014, 12:55   #3  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
Вот об этом классе и идет реч. только примера сложения вроде нет. Нужно сложить 3 binary. данные в двоичном виде. каждый набор binary даннных является двоичным продолжением другого, вместе образуют конечный двоичный файл ax 2009
Старый 16.04.2014, 13:03   #4  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Гм.. а тупо выкинуть их (по очереди) в файл, и потом этот файл засунуть в Binary ?

Вообще, там есть многообещающие методы типа :

Binary.appendSubString Method
Binary.attach Method

- вроде как можно что-то куда-то добавить

public void attach(int64 bufPtr, int bufSize)

Я бы это пробовал..
__________________
Best Regards,
Roman

Последний раз редактировалось RVS; 16.04.2014 в 13:15.
Старый 16.04.2014, 13:14   #5  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
методом for конечно можно, однако размер в килобайт уже заставляет подождать.А если еще больше? - ну какая нафиг система ERP которая еле шевелится.
Binary и attach методы класса вроде как берут нужное колво байт и вставляет в новый binary- не в продолжение старого(не катит - обрезать можно, но соеденять вроде не получается). метод String и wstring читают до нулевого байта- вроде тоже не то. И еще для справки binary класс вроде не может держать 2 гига данных, а bindata и того меньше. на примерно 0x4000000 +- затыкается аксапта

Последний раз редактировалось udmitriy; 16.04.2014 в 13:18.
Старый 16.04.2014, 13:33   #6  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
Класс BinaryIO посмотрите. Там есть режим Append, но это - через файл.

Или вам и надо это - файл получить?
__________________
Best Regards,
Roman
Старый 16.04.2014, 14:56   #7  
LeonDerCom is offline
LeonDerCom
Участник
 
45 / 20 (1) +++
Регистрация: 08.10.2012
udmitriy
System.IO.MemoryStream - не?
Старый 16.04.2014, 15:14   #8  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
а по подробнее (пример какой нибудь можно или ссылку)(не работал с этим еще) - как его из binary инициализировать

Последний раз редактировалось udmitriy; 16.04.2014 в 15:17.
Старый 16.04.2014, 22:59   #9  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Цитата:
Сообщение от udmitriy Посмотреть сообщение
а по подробнее (пример какой нибудь можно или ссылку)(не работал с этим еще) - как его из binary инициализировать
Как-то так:
X++:
    Binary                  binary1 = new Binary("string1");
    Binary                  binary2 = new Binary("string2");
    Binary                  binaryResult;
    
    System.Byte[]           byte1;
    System.Byte[]           byte2;
    System.Byte[]           byteResult;
    
    int                     len;
    System.IO.MemoryStream  memoryStream;
    ;
    
    try
    {
        memoryStream    = binary1.getMemoryStream();
        byte1           = memoryStream.ToArray();
        memoryStream.Close();
    
        memoryStream    = binary2.getMemoryStream();
        byte2           = memoryStream.ToArray();
        memoryStream.Close();
    
        len             = CLRInterop::getAnyTypeForObject(byte1.get_Length()) - 1;
        len            += CLRInterop::getAnyTypeForObject(byte2.get_Length()) - 1;
        
        byteResult      = new System.Byte[len]();
        
        memoryStream    = new System.IO.MemoryStream(byteResult);
        memoryStream.Write(byte1, 0, CLRInterop::getAnyTypeForObject(byte1.get_Length()) - 1);
        memoryStream.Write(byte2, 0, CLRInterop::getAnyTypeForObject(byte2.get_Length()) - 1);
        
        binaryResult    = Binary::constructFromMemoryStream(memoryStream);
        memoryStream.Close();
        
        info(binaryResult.string(0));
    }
    catch (Exception::CLRError)
    {
        error(AifUtil::getClrErrorMessage());
    }
еще результирующий массив можно так заполнить:
X++:
...
        byteResult      = new System.Byte[len]();
        
        System.Buffer::BlockCopy(
            byte1, 
            0, 
            byteResult, 
            0, 
            CLRInterop::getAnyTypeForObject(byte1.get_Length()) - 1);
        
        System.Buffer::BlockCopy(
            byte2, 
            0, 
            byteResult, 
            CLRInterop::getAnyTypeForObject(byte1.get_Length()) - 1, 
            CLRInterop::getAnyTypeForObject(byte2.get_Length()) - 1);
        
        memoryStream    = new System.IO.MemoryStream(byteResult);
...
На больших объемах не проверял, так что о производительности ничего не скажу. Стоит учесть, что в данном случае, при вычислении длины массива отнимается 1, т.к. строка завершается символом конца строки, который нас не интересует. Если оперируете данными файла, то скорее всего 1 вычитать не придется.
__________________
Кононов Пётр

Последний раз редактировалось pedrozzz; 16.04.2014 в 23:06.
Старый 17.04.2014, 05:32   #10  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
Спасибо, но разобрался через rtlmovememory. нескоолько строчек и производительность приятно удивила
Старый 17.04.2014, 13:03   #11  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
пример выложу сюда ODBC ax2009
За это сообщение автора поблагодарили: S.Kuskov (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Binary.string John_11 DAX: Программирование 6 27.10.2017 16:33
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
Sample Design Patterns: Book Give-away: 'Microsoft Dynamics AX 2012 Security How-To' Blog bot DAX Blogs 0 13.12.2012 01:13
ax-erp: How to pass value from MenuItemButton to a Dialog Class? Blog bot DAX Blogs 0 19.09.2012 20:11
Ошибка при работе с binary в Ax2009 someOne DAX: Программирование 2 08.11.2010 10:04

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:51.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.