powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / OLE automation server
2 сообщений из 2, страница 1 из 1
OLE automation server
    #36864837
WarmAndSunnyDay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Мне нужно сделать собственный OLE сервер, чтобы стороння программа подключалась к нему и использовала функции/метода.
Я пытался это сделать 2мя путями и оба раза неудачно:

1)Создал класс non-visual object. Создал в классе необходимые методы. Затем через менеджер проектов сделал automation server, используя в качестве объекта-сервера мой класс. Затем построил проект, нажал deploy - появился файл с библиотекой(tlb) и файл для реестра (reg). Запускаю файл реестра - в реестре появляется запись с моим классом - всё казалось бы хорошо... Но при попытке подключиться к серверу сторонней программой результатов нет. Функция ConnectToNewObject(мой объект) возвращает -3, -4, что по сути одно: нельзя подключиться к объекту.
Я понимаю, что нужно правильно написать конструктор класса-сервера(сейчас он пустой), смотря в аналогичные проги на Си.

Я прочел много литературы, везде написано "создайте класс, содержащий необходмые вам методы и атрибуты" и затем уже про создание из него сервера. Как должен выглядеть конструктор нигде не описано, ни одного готового примера нет, я в отчаянии

2)Я решил использовать другой путь - использовать объект PowerBuilder.Application. Сначала я создал объект PowerBuilder.Application и добавил в него свою библиотеку(содержащую класс для OLE сервера), чтобы потом залить полученный объект в реестр. Код такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
string GUID
long res
res= pb.ConnectToNewObject("PowerBuilder.Application")
pb.LibraryList = "g:\tmp\1\server.pbd"
pb.MachineCode = TRUE
OLEObject tb
res = pb.GenerateGUID(REF GUID)
res = pb.GenerateRegFile(  &
			GUID, &
			"tb_018", &
			"tb.server", &
			 1 ,  0 , &
			"My object's description", &
			"g:\tmp\1\1.reg")

Потом запустил 1.reg дабы обновить реестр. Потом уже попробовал этот объект создать и к чему-нибудь обратиться. Код:

Код: plaintext
1.
2.
3.
4.
5.
OLEObject tmp
tmp = create OLEObject
tmp.ConnectToNewObject("tb.server")
int res
res=tmp.tmp()
MessageBox("1",res)

Результат оказался очень интересным. Объект успешно создаётся. При вызове любой стандартной функции (tmp.classname() к примеру) класса, прога отрабатывает. При попытке вызова функции, написанной мной, возникает exseption name not found calling external function of object bla-bla-bla...

Спасибо всем, кто прочитал! Вы меня по-настоящему спасёте,если что-нибудь дельное подскажете.
...
Рейтинг: 0 / 0
OLE automation server
    #36865188
WarmAndSunnyDay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, второй способ заработал, стороннее приложение может обращаться к объекту. Из PowerBuilder, правда, сделать этого так и не удалось

Но, слава богу, не всё написано так криво, как PB (приложение на плюсах)...
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / OLE automation server
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]