OberonCore
https://forum.oberoncore.ru/

COM автоматизация
https://forum.oberoncore.ru/viewtopic.php?f=81&t=6303
Страница 1 из 1

Автор:  bl.beard [ Суббота, 03 Ноябрь, 2018 03:01 ]
Заголовок сообщения:  COM автоматизация

Добрый день!
Пытаюсь написать маленькую автоматизацию с использованием COM сервера.
Правильно ли я понимаю что для того чтобы использовать COM сервер - нужно сначала сгенерировать для него интерфейсный модуль?
Вызвал инструмент COM-Type Libraries, нашел нужный мне сервер в списке "Type Library", дальше "Generate Automation interface".
Но откомпилировать его не получается: получаю множество ошибок и первая в списке: "illegal sys flag".
Попытка найти подсказки во встроенном хелпе и гугле ничего не дала.
Вложение:
bb-com.png
bb-com.png [ 171.39 КБ | Просмотров: 15495 ]

Подскажите, пжст, как исправить.

Спасибо.

Автор:  Илья Ермаков [ Суббота, 03 Ноябрь, 2018 12:32 ]
Заголовок сообщения:  Re: COM автоматизация

Ох. К сожалению, сто лет уже не пользовались COM.... Попробуйте пока сами покопать, если никто не откликнется. Не получится - попробую что-то вспомнить :)

Автор:  bl.beard [ Суббота, 03 Ноябрь, 2018 12:46 ]
Заголовок сообщения:  Re: COM автоматизация

:(
ок. попробую.

Автор:  adva [ Понедельник, 05 Ноябрь, 2018 13:33 ]
Заголовок сообщения:  Re: COM автоматизация

Все флаги вроде в разделе справки Platform-Specific Issues (Windows) должны быть описаны. Наверное надо какой-то использовать

Автор:  bl.beard [ Вторник, 06 Ноябрь, 2018 00:43 ]
Заголовок сообщения:  Re: COM автоматизация

начал всматриваться что сгенерировалось.

Код:
      (* IOtAction Interface *)
      IOtAction* = POINTER TO RECORD ["{50CF2A57-582B-48BA-9344-B7FB1F280472}"] (stdole.IDispatch) (* dispatch, dual *)
      END;

в этот фрагмент внес 2 исправления и тогда он скомпилировался без ошибок:

Код:
      (* IOtAction Interface *)
      IOtAction* = POINTER TO ABSTRACT RECORD ["{50CF2A57-582B-48BA-9344-B7FB1F280472}"] (WinOleAut.IDispatch) (* dispatch, dual *)
      END;

POINTER TO RECORD -> POINTER TO ABSTRACT RECORD (по просьбе компилятора)
и
stdole.IDispatch -> WinOleAut.IDispatch

но кроме этого все интерфейсы сгенерились дважды:
Код:
   (* IOtEmailAttachments Interface *)
      IOtEmailAttachments* = POINTER TO ABSTRACT RECORD ["{4414FD91-D8BB-11D3-AAE7-00500422BC69}"] (WinOleAut.IDispatch) (* dispatch, dual *)
      END;
      (* IOtEmailAttachments Interface *)
      IOtEmailAttachments* = POINTER TO ABSTRACT RECORD ["{4414FD91-D8BB-11D3-AAE7-00500422BC69}"] (WinOleAut.IDispatch) (* size: 4, vtbl size: 64, dual, oleauto *)
      END;

и компилятор сообщает "multiply defined identifier"
если 1 удалить, то этот фрагмент тоже компилится (разница в них только в последующем комментарии, я же правильно понимаю,
что для компилятора и среды он не несет никакой смысловой нагрузки?).

это так и должно быть? или я что-то изначально неправильно делаю?
Интерфейсов в сервере много, вот сейчас ошибок компиляции этого модуля 12тыс. :
Код:
compiling "CtlOtAut"
  12152 errors detected

Как то странно много ошибок компиляции получается, это при том что я уже произвел множественную замену "POINTER TO ABSTRACT RECORD" и "stdole. -> WinOleAut."
Подскажите, пжст, я на правильном пути или нужно делать что то по другому?

Автор:  budden [ Среда, 07 Ноябрь, 2018 13:50 ]
Заголовок сообщения:  Re: COM автоматизация

Вроде там есть туториалы. Хотя сам я их не читал :)

Автор:  Иван Денисов [ Среда, 07 Ноябрь, 2018 14:20 ]
Заголовок сообщения:  Re: COM автоматизация

Я тоже COM никогда сам не делал, только использовал готовую подсистему Ctl.
Рекомендую обратиться также на международном форуме с вопросом.
https://community.blackboxframework.org/
Возможно там найдутся люди, кто сталкивался с такой проблемой.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/