![]() |
#1 |
NavAx
|
![]()
Доброе утро.
Просьба помочь решить следующую задачку: Некоторая 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"); |
|
![]() |
#2 |
Участник
|
Не уверен что это из этого что-нибудь получиться (и абсолютно не уверен что так будет лучше/быстрее), но в качестве идеи... Можно попробовать через
X++: container c = aipArr.pack(); |
|
![]() |
#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). |
![]() |
#4 |
NavAx
|
![]()
Такой способ пробовал - получается аксаптовский контейнер, в котором хранится свой формат.
|
|
![]() |
#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); |
|
![]() |
#6 |
Участник
|
Цитата:
A вот так не прокатит? X++: BinData.setVariant(tcContainer.ExportToZip()) Последний раз редактировалось S.Kuskov; 22.05.2012 в 09:23. |
|
![]() |
#7 |
NavAx
|
|
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
NavAx
|
При попытке вызвать BinData.setVariant аксапта либо падала, либо просто не исполняла после этой строки код.
|
|
![]() |
#10 |
Участник
|
Вы пробовали вызывать именно BinData.setVariant(tcContainer.ExportToZip()) или для передачи входящего параметра использовали промежуточную переменную типа COMVariant ?
__________________
Дмитрий |
|
![]() |
#11 |
NavAx
|
|
|
![]() |
#12 |
NavAx
|
Уважаемые участники форума,
просьба к Вам поделиться опытом сохранения в файл данных, полученных из COM-метода, который возвращает массив byte[], а также чтения данных из файла и передача их в СОМ-метод, который принимает массив byte[]. Запутался в трех деревьях: COMVariant, Array, BinData. Спасибо! |
|
![]() |
#13 |
GMCS
|
Добрый день, удалось как то разрешить указанную проблему? стоит такая же задача. Спасибо.
|
|
|
|