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, 13:57   #7  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
нужно контейнер blob, в теории конечно можно его получить, но чтото натыкает на мысль что всеже через binaryio будет долго. попробую еще поковырять через rtlmovememory, только нужно наковырять каким образом можно получить адрес binary со смещением. Интересно еще что контейнер в debugere просматривается как контейнер с одним элементом, а при больших файлах там будет виднеться второй элемент?

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

Последний раз редактировалось udmitriy; 16.04.2014 в 15:17.
Старый 16.04.2014, 22:59   #10  
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   #11  
udmitriy is offline
udmitriy
Участник
 
22 / 13 (1) ++
Регистрация: 08.08.2013
Адрес: Primorye
Спасибо, но разобрался через rtlmovememory. нескоолько строчек и производительность приятно удивила
Старый 17.04.2014, 13:03   #12  
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, время: 10:57.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.