Три строчки кода, и к ним ...
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию 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.
Я тут недавно захотел запустить запустить 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 раза
- Контактная информация:
Код: Выделить всё
Set objDocument = objDesktop.loadComponentFromURL("private:factory/swriter","_blank",0,Array())
- Игорь Столяров
- Ветеран движения
- Сообщения: 7498
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 18 раз
- Поблагодарили: 51 раз
По идее (!) вся символьная строка
'.loadComponentFromURL("private:factory/swriter","_blank",0,Array())'
должна передаться в инициализированный объект OLE и все равно, что в ней написано ... Но недоволен именно Clarion - и это непонятно.
На VBS то все работает вообще без вопросов ...
Конкретно Array() - возвращает пустой массив, на языке Basic (или как он там называется) в OO Writer. И уж если с этим оператором проблемы - то это дело Basic'a... Или я чего-то не понял ?
'.loadComponentFromURL("private:factory/swriter","_blank",0,Array())'
должна передаться в инициализированный объект OLE и все равно, что в ней написано ... Но недоволен именно Clarion - и это непонятно.
На VBS то все работает вообще без вопросов ...
Конкретно Array() - возвращает пустой массив, на языке Basic (или как он там называется) в OO Writer. И уж если с этим оператором проблемы - то это дело Basic'a... Или я чего-то не понял ?
- Игорь Столяров
- Ветеран движения
- Сообщения: 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 - то можно подумать, но мне, что-то уже ничего в голову не приходит, как еще можно запустить этот объект ...
Ошибка: "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 раз
раскручиваю через PROP:Object, получи IDispatch объекта, почитай как с ним работать в MSDN и проблемы все снимаются, на C6 все необходимые интерфейсы реализуются чисто на языке Clarion, благо у INTERFACE появился атрибут COM.Игорь Столяров писал(а):Спасибо за идею - но то же самое.
Ошибка: "Parametr 1 type mismatch"
Можно было бы попробовать объявить массив в кларе и
заменить Array() на забинденный &MyArray, но здесь новая история.
Совсем непонятно, что ждут в виде массива во Writer'e ... Есстественно кларионовский массив не проходит - это ожидаемо.
как раскручивать интрефейсы есть в файловом архиве мой про Shell.Explorer там очень подробно написано как раскручиваются и используются интерфейсы.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7498
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 18 раз
- Поблагодарили: 51 раз
OK ! А можно спросить: в чем суть проблемы, не позволяющая работать с OLE интерфейсом OO напрямую, как с MS Office ?
Дело в описании массива или все-таки в том, что OLE переводится для OO в интерфейс вызовов UNO SUN ? Тогда будет понятно в каком направлении искать решение ...
Очень хорошо, что теперь известно, что задача вообще имеет решение. Спасибо за ответ !
Дело в описании массива или все-таки в том, что OLE переводится для OO в интерфейс вызовов UNO SUN ? Тогда будет понятно в каком направлении искать решение ...
Очень хорошо, что теперь известно, что задача вообще имеет решение. Спасибо за ответ !
дело в том что штатными клашиными средставми невозможно выставлять некоторые пропы и вызывать нектороые методы, точнее сказать только некоторые можно вызывать, большую часть нельзяИгорь Столяров писал(а):OK ! А можно спросить: в чем суть проблемы, не позволяющая работать с OLE интерфейсом OO напрямую, как с MS Office ?
например, можешь ли ты штатно через чисто клашу для того же Excel'я выставить коммент у определённой ячейки?
я не смог, только через Idispath
- Игорь Столяров
- Ветеран движения
- Сообщения: 7498
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 18 раз
- Поблагодарили: 51 раз