16.04.2014, 11:31 | #1 |
Участник
|
Binary + Binary How?
Как сложить 3 binary в один?
По просторам интернета не нарыл, эксперементирую и ни чего не выходит. может кто поможет. если кто знает методом побитового копирования через for - не предлагайте пробую RtlMoveMemory так же не выходит. чего туда сувать для копирования хз(вернее чего сувать знаю , но как получить это не знаю) |
|
16.04.2014, 11:50 | #2 |
Сенбернар
|
А зачем вы это делаете, что на входе, и что на выходе получить хотите - не поделитесь?
И версия еще Аксапы какая, да.. А так - вот это можно посмотреть, к примеру : 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 |
Участник
|
Вот об этом классе и идет реч. только примера сложения вроде нет. Нужно сложить 3 binary. данные в двоичном виде. каждый набор binary даннных является двоичным продолжением другого, вместе образуют конечный двоичный файл ax 2009
|
|
16.04.2014, 13:03 | #4 |
Сенбернар
|
Гм.. а тупо выкинуть их (по очереди) в файл, и потом этот файл засунуть в 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 |
Участник
|
методом for конечно можно, однако размер в килобайт уже заставляет подождать.А если еще больше? - ну какая нафиг система ERP которая еле шевелится.
Binary и attach методы класса вроде как берут нужное колво байт и вставляет в новый binary- не в продолжение старого(не катит - обрезать можно, но соеденять вроде не получается). метод String и wstring читают до нулевого байта- вроде тоже не то. И еще для справки binary класс вроде не может держать 2 гига данных, а bindata и того меньше. на примерно 0x4000000 +- затыкается аксапта Последний раз редактировалось udmitriy; 16.04.2014 в 13:18. |
|
16.04.2014, 13:33 | #6 |
Сенбернар
|
Класс BinaryIO посмотрите. Там есть режим Append, но это - через файл.
Или вам и надо это - файл получить?
__________________
Best Regards, Roman |
|
16.04.2014, 13:57 | #7 |
Участник
|
нужно контейнер blob, в теории конечно можно его получить, но чтото натыкает на мысль что всеже через binaryio будет долго. попробую еще поковырять через rtlmovememory, только нужно наковырять каким образом можно получить адрес binary со смещением. Интересно еще что контейнер в debugere просматривается как контейнер с одним элементом, а при больших файлах там будет виднеться второй элемент?
Последний раз редактировалось udmitriy; 16.04.2014 в 13:59. |
|
16.04.2014, 14:56 | #8 |
Участник
|
udmitriy
System.IO.MemoryStream - не? |
|
16.04.2014, 15:14 | #9 |
Участник
|
а по подробнее (пример какой нибудь можно или ссылку)(не работал с этим еще) - как его из binary инициализировать
Последний раз редактировалось udmitriy; 16.04.2014 в 15:17. |
|
16.04.2014, 22:59 | #10 |
Молодой, подающий надежды
|
Цитата:
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); ...
__________________
Кононов Пётр Последний раз редактировалось pedrozzz; 16.04.2014 в 23:06. |
|
17.04.2014, 05:32 | #11 |
Участник
|
Спасибо, но разобрался через rtlmovememory. нескоолько строчек и производительность приятно удивила
|
|
17.04.2014, 13:03 | #12 |
Участник
|
пример выложу сюда ODBC ax2009
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |