|
Преобразование ComОбъекта, содержащего ХранилищеЗначения в двоичные данные | ☑ | ||
---|---|---|---|---|
0
kiabs
20.09.12
✎
15:59
|
Ситуация. Запросом через внешнее СОМсоединение получаю ХранилищеЗначния. Как мне его преобразовать в двоичные данные? (Нужно для последующего преобразования его в картинку).
Через отладчик нашел такую штуку (Строка.СотрудникИзображение - собственно и есть СОМобъект с хранилищем) - Строка.СотрудникИзображение.Get().GetBinaryData() , но в этом случае тип объекта остается COMобъект.... |
|||
1
vmv
20.09.12
✎
16:05
|
все правильно из от слона никогда не получить маленькую зебру - даже если он ей вдует, все же просто
|
|||
2
kiabs
20.09.12
✎
16:09
|
Значит не тем путем иду...
Подскажите хоть в каком направлении копать ... как из этого СОМобъекта получить картинку? |
|||
3
zladenuw
20.09.12
✎
16:11
|
(1) если слон знает. как найти зебру. пусть он подскажет. а зрителей много
|
|||
4
aleks-id
20.09.12
✎
16:12
|
COMSafeArray не поможет?
|
|||
5
zladenuw
20.09.12
✎
16:13
|
||||
6
vmv
20.09.12
✎
16:13
|
(2) надо в обеих в общих модулях делать экспортные процедуры, которые будут кормиться параметрами из СВОИХ хранилищзначений и строковыми параметрами.
В параметрах УИД (строкой), а потом если тебе повезет плевать, что это комы, зная уид(свой/чужой) из общаковых функций делаем и обратные связи пересылки. Зы: картинки придеться через файл гонять или еще как-то |
|||
7
Kashemir
20.09.12
✎
16:14
|
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен |
|||
8
zladenuw
20.09.12
✎
16:14
|
Файл = Новый ХранилищеЗначения(ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ЗначениеВСтрокуВнутр(ОбъектДрБазы.ХранилищеДопИнформацииФайл.Получить())));
|
|||
9
zladenuw
20.09.12
✎
16:14
|
ТС и итог. спасибо всем .ну!
|
|||
10
Kashemir
20.09.12
✎
16:15
|
+(7) П.с. это о двоичных данных. Серизализуй через хтдо и разверни на приемнике.
|
|||
11
vmv
20.09.12
✎
16:15
|
(8) не взлетит
|
|||
12
zladenuw
20.09.12
✎
16:15
|
(11) за бросал фикалиаем. почему ?
|
|||
13
Axel2009
20.09.12
✎
16:15
|
ИмяФайла = ПолучитьИмяВременногоФайла();
КартинкаУПП.ПолучитьДвоичныеДанные().Записать(ИмяФайла); Картинка = новый Картинка(ИмяФайла, Истина); ХранилищеОбъект.Хранилище = новый ХранилищеЗначения(Картинка); |
|||
14
vmv
20.09.12
✎
16:16
|
(13) через временный файл взлетит - уже писало)
|
|||
15
zladenuw
20.09.12
✎
16:18
|
v8: Передача двоичных данных в COMОбъект.
я хитрее. я копи паст. |
|||
16
zladenuw
20.09.12
✎
16:18
|
(9) ТС. жду похвалы для всех!
|
|||
17
Kashemir
20.09.12
✎
16:21
|
(0) ЗаписьXML = ВнешнееСоединение.NewObject("ЗаписьXML");
ЗаписьXML.УстановитьСтроку(); ВнешнееСоединение.СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Строка.СотрудникИзображение); ХранилищеВСтроке = ЗаписьXML.Закрыть(); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ХранилищеВСтроке); ХранилищеНаВызывающейСтороны = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); |
|||
18
ptiz
20.09.12
✎
16:23
|
а Base64Строка не катит?
|
|||
19
zladenuw
20.09.12
✎
16:42
|
(18) а решение какое ?
|
|||
20
zladenuw
20.09.12
✎
16:42
|
хотя я понимаю. надо создать ник. ждать пока он будет синий и писать гадости. бу га га
|
|||
21
zladenuw
20.09.12
✎
16:43
|
(13) вуду. у нас ком. а не забытый файл
|
|||
22
zladenuw
20.09.12
✎
16:44
|
(13) хотя намеки есть
|
|||
23
Serginio1
20.09.12
✎
16:44
|
||||
24
Serginio1
20.09.12
✎
16:45
|
Через ХранилищеЗначения XmlСтрока и XmlЗначение
|
|||
25
zladenuw
20.09.12
✎
16:52
|
сериализован в хмл. забыл
|
|||
26
kiabs
21.09.12
✎
14:42
|
Всем большое спасибо, но мне удалось сделать все намного проще =)
COM_Изображение = Строка.СотрудникИзображение.Get().GetBinaryData(); ДвоичнаяКартинка = Base64Значение(Соединение.Base64Строка(COM_Изображение)); |
|||
27
Serginio1
21.09.12
✎
14:53
|
Проще
УдаленноеХранилище = СоединениеCOM.NewObject("ХранилищеЗначения", Строка.СотрудникИзображение); СтрокаXML = СоединениеCOM.XMLСтрока(УдаленноеХранилище); Хранилище = XMLЗначение(Тип("ХранилищеЗначения"), СтрокаXML); РезультатЗапроса = Хранилище.Получить(); |
|||
28
kiabs
21.09.12
✎
15:07
|
(27) Это даст какие-то преимущества над мои методом?
|
|||
29
Serginio1
21.09.12
✎
15:16
|
В общем то да. Меньшее количество преобразований.
|
|||
30
Serginio1
21.09.12
✎
15:20
|
Хотя у тебя Строка.СотрудникИзображение это и есть Хранилище
То можно еще проще СтрокаXML = СоединениеCOM.XMLСтрока(Строка.СотрудникИзображение); СотрудникИзображение= XMLЗначение(Тип("ХранилищеЗначения"), СтрокаXML); |
|||
31
kiabs
21.09.12
✎
15:25
|
(30)Спасибо за подсказку. по замеру производительности действительно работает быстрее, правда в моем случае прирост незначителен, но буду знать теперь =)
|
|||
32
Serginio1
21.09.12
✎
16:28
|
(31) Там суть в том что в хранилище может храниться сжатые данные. Таким образом XMLСтрока(Строка.СотрудникИзображение) преобразует двоичные данные сжатого изображение и соответственно обратно из строки. А вот двоичные данные картинки по размерам может существенно различаться от Хранилища
См v8: Помогите с загрузкой изображения в XML |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |