Страница 1 из 1

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

Добавлено: 14 Апрель 2006, 8:11
Игорь Столяров
Привет !

Я тут недавно захотел запустить запустить 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.

Добавлено: 14 Апрель 2006, 8:25
Admin

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

Set objDocument = objDesktop.loadComponentFromURL("private:factory/swriter","_blank",0,Array())
мне кажется что ошибка где то здесь: Array()

Добавлено: 14 Апрель 2006, 8:53
Игорь Столяров
По идее (!) вся символьная строка
'.loadComponentFromURL("private:factory/swriter","_blank",0,Array())'
должна передаться в инициализированный объект OLE и все равно, что в ней написано ... Но недоволен именно Clarion - и это непонятно.
На VBS то все работает вообще без вопросов ... :(
Конкретно Array() - возвращает пустой массив, на языке Basic (или как он там называется) в OO Writer. И уж если с этим оператором проблемы - то это дело Basic'a... Или я чего-то не понял ?

Добавлено: 14 Апрель 2006, 9:55
Admin
а вот это ... засунуть в строку и передать как:
Loc:Param CSTRING(200)
Loc:Param = objDesktop & '.loadComponentFromURL("private:factory/swriter","_blank",0,Array())'
objDocument = objServiceManager{Loc:Param}

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

У меня почему-то сложилось нехорошое впечатление, что сам механизм работы с OLE Clarion проверен и работает для какого-то набора OLE объектов. Например с Microsoft OLE проблем нет, а здесь SUN и возможно под OLE объектом понимется, что-то другое ?
А скрипт VBS просто имеет более широкую совместимость работы с ActivX компонентами чем OLE Clarion'а ? Тогда можно и не терзать программу. А вот если проблема с синтаксисом написания в Clarione - то можно подумать, но мне, что-то уже ничего в голову не приходит, как еще можно запустить этот объект ... :(

Добавлено: 19 Апрель 2006, 9:22
Игорь Столяров
Тут нашелся забавный пример работы Open Office на Clarion.
Немного не то, что нужно ... Но ! Учитывая, что для всего и вся идут примеры, готовые технологические решения на VBS - то сам способ работы может быть интересен. (бросил на FTP файл: OO_RUN.ZIP)
Он правда на испанском - но все понятно ... ;)

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

как раскручивать интрефейсы есть в файловом архиве мой про Shell.Explorer там очень подробно написано как раскручиваются и используются интерфейсы.

Добавлено: 19 Апрель 2006, 10:46
Игорь Столяров
OK ! А можно спросить: в чем суть проблемы, не позволяющая работать с OLE интерфейсом OO напрямую, как с MS Office ?
Дело в описании массива или все-таки в том, что OLE переводится для OO в интерфейс вызовов UNO SUN ? Тогда будет понятно в каком направлении искать решение ...
Очень хорошо, что теперь известно, что задача вообще имеет решение. ;) Спасибо за ответ !

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

например, можешь ли ты штатно через чисто клашу для того же Excel'я выставить коммент у определённой ячейки?
я не смог, только через Idispath

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