![]() |
![]() |
![]() |
|
Проблема с получением интерфейсов COM-объекта | ☑ | ||
---|---|---|---|---|
0
ЕстьПроблемка
31.07.14
✎
05:31
|
Всем доброго времени суток!
Подскажите, пожалуйста, кто знает, как победить следующую ситуацию: есть COM-объект сторонней разработки для доступа к параметрам оборудования. Требуется собственно получить эти параметры из 1С 8.2. Делаю следующее: Перем ptAttributeExt; pt = НОВЫЙ COMОбъект("PyronTrans.Application"); pt.Connent("user", "password"); ptAttributes = pt.GetAttributes(); //возвращается COMSafeArray Для Каждого ptAttribute Из ptAttributes Цикл //ptAttribute является COMОбъектом, поддерживающим 2 интерфейса: IAttr и IExtAttr из 1С же видно только интерфейс по умолчанию (IAttr), а нужно как-то достучаться до интерфейса IExtAttr... ptAttribute.QueryInterface("IExtAttr", ptAttributeExt); // Так тоже не получилось, выдает ошибку несовпадения типов! КонецЦикла; Пробовал тоже самое сделать в VBA - никаких проблем, можно обращаться к обоим интерфейсам. Но мне нужно это в 1С. Подскажите, пожалуйста, кто с подобным сталкивался. Заранее спасибо всем откликнувшимся! |
|||
1
ЕстьПроблемка
31.07.14
✎
18:59
|
Совсем никаких идей? (((
|
|||
2
Господин ПЖ
31.07.14
✎
19:10
|
пиши обертку... не все что есть на свете обязано работать с 1с
|
|||
3
ЕстьПроблемка
31.07.14
✎
19:24
|
(3) - ну, видимо, придется... Хоть и очень не хотелось бы. Там в это COMе очень много всяких функций, а проблема только с одним параметром. Остальное нужное все в дефолтных интерфейсах... Ну все-равно, спасибо.
|
|||
4
Torquader
31.07.14
✎
23:19
|
Сначала попробовать в VbScript - если прокатывает, то вставить VbScript в 1С.
Но, QueryInterface требует передачи указателя, а скриптовые языки как и 1С умеют передавать только ссылку на Variant, и если тот, который отвечает на запрос, не умеет работать с Variant, то ничем и не поможешь. Да и потом, кроме IDispatch, 1С ничего не умеет. |
|||
5
ЕстьПроблемка
31.07.14
✎
23:41
|
(4) - А вставить VBScript в 1С - это как?
В принципе обертку я уже написал - так что критичной проблемы уже нет. Но если получится обойти через VBScript - то было бы гораздо лучше, лишние обертки ни к чему хорошему не приводят. Подскажите, пожалуйста, что имелось ввиду, как его можно вставить? |
|||
6
ADirks
01.08.14
✎
07:56
|
(5) примерно так
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl"); Скрипт.Language = "JScript"; Стр = " |function GetNum(str) |{ | var re = new RegExp('(.*)(Cумма [\\d-\\.,]*.*)', 'i'); //Откинем хвост с суммами | var arr = re.exec(str); | if( arr != null ) str = arr[1]; | | re = new RegExp('(.*)(НДС[\\s(]*[\\d]*.*)', 'i'); //Откинем хвост с суммами | arr = re.exec(str); | if( arr != null ) str = arr[1]; | | re = new RegExp('\\d\\d\\.\\d\\d\\.\\d{2,4}', 'ig'); //вычистим даты | str = str.replace(re, ''); | re = new RegExp('\\d{2,4}\\s*[гГ]', 'ig'); //вычистим даты | str = str.replace(re, ''); | | re = new RegExp('\\d{3,}', 'ig'); //вот теперь все циферки будем считать потенциальными номерами счетов | arr = str.match(re); | if( arr == null ) return ''; | | return '' + arr; |} |"; Скрипт.AddCode(стр); стрНомера = Скрипт.Run("GetNum", стрНазначениеПлатежа); |
|||
7
ADirks
01.08.14
✎
07:59
|
ещё у MSScriptControl.ScriptControl есть такая штука, как AddObject() - добавляет внешний COM-объект в пространство имён скрипта, тип:
Скрипт.AddObject("myObject", ToolBar); |
|||
8
ЕстьПроблемка
01.08.14
✎
17:32
|
(6) - Блин, извините, не понимаю... А можно как-то чуть более подробно, что именно надо написать, вот, например, в моем случае? Необходимый код в самом начале, он вроде простой очень, я из него все лишнее убрал - оставил только то, что является проблемой.
|
|||
9
Garykom
гуру
01.08.14
✎
17:46
|
(8) суть в (6) это обертка в виде программы-скрипта на каком то скриптовом языке (jscript, vbscript etc) вызов этой обертки из 1С.
Если могешь на c++, c# и прочих сделать обертку то не парься таким |
|||
10
ЕстьПроблемка
01.08.14
✎
18:33
|
(9) - В том-то и дело, что нормальную обертку я сделать не могу, C никогда не пользовался. Сделал на VB dll-ку, в принципе работает, но это какое-то небольшое извращение. Просто если как-то можно несложно просто обернуть этот COM в VBScript и все тоже будет работать - было бы гораздо проще. Можете подсказать, как это сделать? Или это не так и просто?
|
|||
11
Garykom
гуру
01.08.14
✎
21:00
|
(10) пишешь скрипт на wiki:Visual_Basic_Scripting_Edition
добиваешься чтобы все работало и были нужные функции, которые возвращали то что надо (не забываем про только простые типы в return'ах) потому это дело заталкиваешь в 1С по принципу как в (6), т.е. 1С используя "MSScriptControl.ScriptControl" запускает твои скрипты... |
|||
12
Garykom
гуру
01.08.14
✎
21:05
|
(11)+ поищи учебника по vbscript или jscript
вот например http://dunaevv1.narod.ru/vbs_refers.htm файлики ИмяСкрипта.vbs создаешь и запускаешь пока пишешь )) |
|||
13
ЕстьПроблемка
01.08.14
✎
21:28
|
Garykom, спасибо. Буду пробовать!
|
|||
14
Defender aka LINN
01.08.14
✎
21:30
|
(0) Калгари... 1С... Чего-то я не понимаю в этой жизни
|
|||
15
ЕстьПроблемка
01.08.14
✎
21:34
|
(14) - В жизни всякое бывает )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |