22.05.2012, 08:02 | #1 |
NavAx
|
Array -> File
Доброе утро.
Просьба помочь решить следующую задачку: Некоторая COM - функция возвращает массив бинарных данных, который представляет собой zip - архив. Получив этот архив в аксапте, его необходимо сохранить как файл. COM - функция объявлена так: PHP код:
X++: Array aipArr = new Array(Types::Integer); int i; binData binData; Binary b; ; aipArr = tcContainer.ExportToZip(); b = new Binary(aipArr.lastIndex()); for(i = 1; i <= aipArr.lastIndex(); i++) { b.byte(i-1, aipArr.value(i)); } binData = new binData(); bindata.setBinaryData(b); binData.saveFile("d:\\test.zip"); |
|
22.05.2012, 08:35 | #2 |
Участник
|
Не уверен что это из этого что-нибудь получиться (и абсолютно не уверен что так будет лучше/быстрее), но в качестве идеи... Можно попробовать через
X++: container c = aipArr.pack(); |
|
22.05.2012, 09:09 | #3 |
Участник
|
Мне кажется, лучше не гонять данные через аксаптовские объекты, я бы предложил посмотреть в сторону ADO Stream:
X++: #define.adTypeBinary (1) #define.adSaveCreateNotExist (1) #define.adSaveCreateOverwrite (2) COMVariant arr = tcContainer.ExportToZip(); COM adoStream = new COM('ADODB.Stream'); ; adoStream.Type(#adTypeBinary); adoStream.Open(); adoStream.Write(arr); adoStream.SaveToFile(@"c:\path\filename.zip", #adSaveCreateOverwrite); |
|
|
За это сообщение автора поблагодарили: Roman777 (2), S.Kuskov (2). |
22.05.2012, 09:10 | #4 |
NavAx
|
Такой способ пробовал - получается аксаптовский контейнер, в котором хранится свой формат.
|
|
22.05.2012, 09:16 | #5 |
NavAx
|
Цитата:
Сообщение от gl00mie
Мне кажется, лучше не гонять данные через аксаптовские объекты, я бы предложил посмотреть в сторону ADO Stream:
X++: #define.adTypeBinary (1) #define.adSaveCreateNotExist (1) #define.adSaveCreateOverwrite (2) COMVariant arr = tcContainer.ExportToZip(); COM adoStream = new COM('ADODB.Stream'); ; adoStream.Type(#adTypeBinary); adoStream.Open(); adoStream.Write(arr); adoStream.SaveToFile(@"c:\path\filename.zip", #adSaveCreateOverwrite); |
|
22.05.2012, 09:18 | #6 |
Участник
|
Цитата:
A вот так не прокатит? X++: BinData.setVariant(tcContainer.ExportToZip()) Последний раз редактировалось S.Kuskov; 22.05.2012 в 09:23. |
|
22.05.2012, 09:27 | #7 |
NavAx
|
|
|
22.05.2012, 09:41 | #8 |
Участник
|
|
|
22.05.2012, 09:44 | #9 |
NavAx
|
При попытке вызвать BinData.setVariant аксапта либо падала, либо просто не исполняла после этой строки код.
|
|
22.05.2012, 14:20 | #10 |
Участник
|
Вы пробовали вызывать именно BinData.setVariant(tcContainer.ExportToZip()) или для передачи входящего параметра использовали промежуточную переменную типа COMVariant ?
__________________
Дмитрий |
|
22.05.2012, 14:27 | #11 |
NavAx
|
|
|
09.07.2012, 14:52 | #12 |
NavAx
|
Уважаемые участники форума,
просьба к Вам поделиться опытом сохранения в файл данных, полученных из COM-метода, который возвращает массив byte[], а также чтения данных из файла и передача их в СОМ-метод, который принимает массив byte[]. Запутался в трех деревьях: COMVariant, Array, BinData. Спасибо! |
|
28.07.2014, 12:25 | #13 |
GMCS
|
Добрый день, удалось как то разрешить указанную проблему? стоит такая же задача. Спасибо.
|
|
|
|