Имя: Пароль:
1C
1С v8
Как работать с COM объектом типа Variant?
,
0 TormozIT
 
гуру
22.07.13
12:43
В отладчике у него отсутствуют свойства и просто указан типа COMОбъект. Возможно ли из встроенного языка работать с такими объектами?
1 Fragster
 
гуру
22.07.13
12:43
а это не тот тип, который может быть чем угодно?
2 TormozIT
 
гуру
22.07.13
12:44
(1) Вроде того
3 Ненавижу 1С
 
гуру
22.07.13
12:45
(0) да
4 Serginio1
 
22.07.13
12:46
COMОбъект это объект реализующий IDispatch. Сами типы в СОМ это структуры. Смотри TVarData
5 TormozIT
 
гуру
22.07.13
12:46
Как понять, что находится внутри? Как его привести к нужному типу (особенно если это объектный тип)?
6 Fragster
 
гуру
22.07.13
12:47
7 Fragster
 
гуру
22.07.13
12:48
8 TormozIT
 
гуру
22.07.13
12:49
(6) Функции VariantInit в платформе нет и у объекта тоже нет.
9 Serginio1
 
22.07.13
12:50
Например установка параметров по ссылке для типа VT_DISPATCH
Args[j-i].vt:=VT_BYREF  or TvarData(p^[i]).VType;
Args[j-i].unkVal:=@TVarData(p^[i]).VAny;
10 Ненавижу 1С
 
гуру
22.07.13
12:50
(0) нужно конечно знать с чем ты работаешь
11 Serginio1
 
22.07.13
12:51
(8) Посмотри мою реализацию на Delphi в AddInFromITypeInfo2 в LoadObject.pas
12 Ненавижу 1С
 
гуру
22.07.13
12:51
разные варианты, многие даже перепрограммируются под нужные вещи
13 TormozIT
 
гуру
22.07.13
12:55
Код пишется на встроенном языке 1С.
Примерно понять с чем работаю можно здесь
https://github.com/aki2o/vb-completion/blob/master/getTLI.vbs поискав по слову "ReturnType.TypedVariant"
14 TormozIT
 
гуру
22.07.13
12:58
(13) Там видно что VBS предоставляет функцию TypeName для этого типа. В платформе 1С как я понимаю такой возможности (узнать тип) нет?
15 Serginio1
 
22.07.13
13:00
Ну TLI.TLIApplication это далеко не внутренний язык.
Такую же библиотеку ты и сам можешь создать на базе ItypeInfo
16 TormozIT
 
гуру
22.07.13
13:02
(13) Интересует решение на встроенном языке с применением существующих внешних компонент.
17 Serginio1
 
22.07.13
13:39
Написать самому то непроблема
http://www.rsdn.ru/article/com/typeinfo.xml?print
Программист всегда исправляет последнюю ошибку.