Три строчки кода, и к ним ...

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Три строчки кода, и к ним ...

Сообщение Игорь Столяров »

Привет !

Я тут недавно захотел запустить запустить OpenOffice.org Writer 2.0.2
из программы, проблем нет - в Internet'e нашлел 3 строки кода на VBS:

Dim objServiceManager, objDesktop, objDocument
Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
Set objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
Set objDocument = objDesktop.loadComponentFromURL("private:factory/swriter","_blank",0,Array())

работает без проблем.
Почитал Help, порылся в форуме и переписал эту красоту на Clarion:

objServiceManager Long
objDesktop CString(64)
objDocument CString(64)

Code

objServiceManager = Create(0,Create:Ole)
objServiceManager{Prop:ReportException} = True
objServiceManager{Prop:Create} = 'com.sun.star.ServiceManager'
objDesktop = objServiceManager{'createInstance("com.sun.star.frame.Desktop")'}
objDocument = objServiceManager{objDesktop & '.loadComponentFromURL("private:factory/swriter","_blank",0,Array())'}

и не работает :( Говорит ошибка параметра в последней строке.
Вопрос даже не об этом примере, а скорее о том в чем здесь ошибка
и как вообще можно работать с OLE из Clarion ?
Или вообще все неправильно, и лучше забыть и запускать VBS скрипт ... ? Блин ! Среда все та же: С6.3 9051 & WinXP SP2.
Аватара пользователя
Admin
Администратор
Сообщения: 3963
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 29 раз
Поблагодарили: 22 раза
Контактная информация:

Сообщение Admin »

Код: Выделить всё

Set objDocument = objDesktop.loadComponentFromURL("private:factory/swriter","_blank",0,Array())
мне кажется что ошибка где то здесь: Array()
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Сообщение Игорь Столяров »

По идее (!) вся символьная строка
'.loadComponentFromURL("private:factory/swriter","_blank",0,Array())'
должна передаться в инициализированный объект OLE и все равно, что в ней написано ... Но недоволен именно Clarion - и это непонятно.
На VBS то все работает вообще без вопросов ... :(
Конкретно Array() - возвращает пустой массив, на языке Basic (или как он там называется) в OO Writer. И уж если с этим оператором проблемы - то это дело Basic'a... Или я чего-то не понял ?
Аватара пользователя
Admin
Администратор
Сообщения: 3963
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 29 раз
Поблагодарили: 22 раза
Контактная информация:

Сообщение Admin »

а вот это ... засунуть в строку и передать как:
Loc:Param CSTRING(200)
Loc:Param = objDesktop & '.loadComponentFromURL("private:factory/swriter","_blank",0,Array())'
objDocument = objServiceManager{Loc:Param}
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Сообщение Игорь Столяров »

Спасибо за идею - но то же самое.
Ошибка: "Parametr 1 type mismatch"
Можно было бы попробовать объявить массив в кларе и
заменить Array() на забинденный &MyArray, но здесь новая история.
Совсем непонятно, что ждут в виде массива во Writer'e ... :( Есстественно кларионовский массив не проходит - это ожидаемо.

У меня почему-то сложилось нехорошое впечатление, что сам механизм работы с OLE Clarion проверен и работает для какого-то набора OLE объектов. Например с Microsoft OLE проблем нет, а здесь SUN и возможно под OLE объектом понимется, что-то другое ?
А скрипт VBS просто имеет более широкую совместимость работы с ActivX компонентами чем OLE Clarion'а ? Тогда можно и не терзать программу. А вот если проблема с синтаксисом написания в Clarione - то можно подумать, но мне, что-то уже ничего в голову не приходит, как еще можно запустить этот объект ... :(
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Сообщение Игорь Столяров »

Тут нашелся забавный пример работы Open Office на Clarion.
Немного не то, что нужно ... Но ! Учитывая, что для всего и вся идут примеры, готовые технологические решения на VBS - то сам способ работы может быть интересен. (бросил на FTP файл: OO_RUN.ZIP)
Он правда на испанском - но все понятно ... ;)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Игорь Столяров писал(а):Спасибо за идею - но то же самое.
Ошибка: "Parametr 1 type mismatch"
Можно было бы попробовать объявить массив в кларе и
заменить Array() на забинденный &MyArray, но здесь новая история.
Совсем непонятно, что ждут в виде массива во Writer'e ... :( Есстественно кларионовский массив не проходит - это ожидаемо.
раскручиваю через PROP:Object, получи IDispatch объекта, почитай как с ним работать в MSDN и проблемы все снимаются, на C6 все необходимые интерфейсы реализуются чисто на языке Clarion, благо у INTERFACE появился атрибут COM.

как раскручивать интрефейсы есть в файловом архиве мой про Shell.Explorer там очень подробно написано как раскручиваются и используются интерфейсы.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Сообщение Игорь Столяров »

OK ! А можно спросить: в чем суть проблемы, не позволяющая работать с OLE интерфейсом OO напрямую, как с MS Office ?
Дело в описании массива или все-таки в том, что OLE переводится для OO в интерфейс вызовов UNO SUN ? Тогда будет понятно в каком направлении искать решение ...
Очень хорошо, что теперь известно, что задача вообще имеет решение. ;) Спасибо за ответ !
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Игорь Столяров писал(а):OK ! А можно спросить: в чем суть проблемы, не позволяющая работать с OLE интерфейсом OO напрямую, как с MS Office ?
дело в том что штатными клашиными средставми невозможно выставлять некоторые пропы и вызывать нектороые методы, точнее сказать только некоторые можно вызывать, большую часть нельзя

например, можешь ли ты штатно через чисто клашу для того же Excel'я выставить коммент у определённой ячейки?
я не смог, только через Idispath
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7498
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 18 раз
Поблагодарили: 51 раз

Сообщение Игорь Столяров »

Мда, действительно. Коммент к ячейке добавить удается, а вот заполнить его содержание - нет. :(
Спасибо за науку - пошел разбираться с Idispath ... ;)
Ответить