Lazarus и COM

Вопросы по языку Паскаль и RAD-системе Delphi.
Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Lazarus и COM

Сообщение Денис » 13.01.2012 (Пт) 14:32

Здравствуйте!

Продолжаю кодить для себя мелкую автоматизацию в быту на лазарусе (клон дельфи с открытыми исходниками).

В отличие от дельфи, здесь отсутствует поддержка технологии COM и ActiveX.
Тем не менее, нужные интерфейсы и классы объявлены.

Ну и в общем, возникла потребность подключить к проекту COM'понент.
Долгое гугление выдало мне рабочий пример, по созданию объекта иэксплорера.

Привожу вырезку из работающего модуля:
Код: Выделить всё
uses
  Windows, ComObj, ...;

type

  { TForm1 }

  TForm1 = class(TForm)
    ...
  end;

  PIUnknown=^IUnknown;

  TAtlAxAttachControl = function(Control:IUnknown;
     hwind:hwnd;ppUnkContainer:PIUnknown): HRESULT; stdcall;
  IEventIntfEvents = dispinterface
    ['{EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B}']
  end;

var
  Form1: TForm1;
  WebBrower: variant;

implementation

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
  atl:hmodule;
  cmdparam: TStringList;
  AtlAxAttachControl:TAtlAxAttachControl;

begin

  atl:=LoadLibrary('atl.dll');
  AtlAxAttachControl:=TAtlAxAttachControl(GetProcAddress(atl, 'AtlAxAttachControl'));
  WebBrower:=CreateOleObject('Shell.Explorer');
  AtlAxAttachControl(WebBrower, Panel1.Handle,nil);
  WebBrower.Navigate('http://google.ru');

end;


Как видим, данный пример создает встраиваемый в окно OLE-объект, предоставляемый соответственно, OLE-сервером (коим является висящий в тени процесс иэксплорера).

Мне бы хотелось узнать, есть ли у кого из многоязыковых форумчан готовые, более оптимальные наработки в этом направлении?
Под более оптимальными я имею ввиду работу с IDispatch напрямую. Что-то навроде этого:

Код: Выделить всё
type
  MyControl = class(IDispatch)
    ...
  end;
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Lazarus и COM

Сообщение Хакер » 13.01.2012 (Пт) 15:07

Зачем с IDispatch, если есть конкретный обычный интерфейс?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Lazarus и COM

Сообщение Денис » 14.01.2012 (Сб) 1:34

Конкретно по фразе "конкретный обычный интерфейс" ничего внятного не гуглится, к сожалению.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Lazarus и COM

Сообщение Хакер » 14.01.2012 (Сб) 7:56

А подумать головой?
Имелсля в виду IWebBrowser.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Lazarus и COM

Сообщение Денис » 17.01.2012 (Вт) 8:31

Мне собственно браузер не нужен, у меня тут сторонние контролы со своими интерфейсами. Если я правильно понимаю, мне нужно программно вытягивать эти интерфейсы из контролов. Либо через IDispatch либо через IUnknown.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Lazarus и COM

Сообщение Хакер » 17.01.2012 (Вт) 8:48

Денис писал(а):Мне собственно браузер не нужен, у меня тут сторонние контролы со своими интерфейсами.

ActiveX-контролы, которые нужно поместить в окно-контейнер?

Денис писал(а):Если я правильно понимаю, мне нужно программно вытягивать эти интерфейсы из контролов. Либо через IDispatch либо через IUnknown.

Какой-либо COM-интерфейс может быть запрошен у абсолютно любого другого COM-интерфейса, не только у IUnknown и IDispatch.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Lazarus и COM

Сообщение Денис » 17.01.2012 (Вт) 9:39

Хакер писал(а):ActiveX-контролы, которые нужно поместить в окно-контейнер?

Да.
Хакер писал(а):COM-интерфейс может быть запрошен у абсолютно любого другого COM-интерфейса

Изучаю этот вопрос.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Lazarus и COM

Сообщение Хакер » 17.01.2012 (Вт) 9:41

Денис писал(а):Да.

А Lazarus делает всю черновую работу для окон-контейнеров? С точки зрения OLE, нет окон, а есть объекты-контейнеры. Объекты контейнеры должны поддерживать ряд интерфейсов.

Денис писал(а):Изучаю этот вопрос.

По COM надо похоже писать статью. Степень непонимания и степень обожествления интерфейса IDispatch выходит за всякие границы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Lazarus и COM

Сообщение Денис » 17.01.2012 (Вт) 10:19

Хакер писал(а):А Lazarus делает всю черновую работу для окон-контейнеров?

Нет, и в этом основная проблема, практически вся выгугливаемая документация гласит: "Просто киньте компонент на форму, просто укажите библиотеку в мастере, всю черновую работу дэльфи сделает за вас", а мне то как раз и надо выполнить черновую работу, запихнуть ее в свой модуль и юзать в дальнейшем.
Хакер писал(а):По COM надо похоже писать статью.

Да! Отсутствие грамотной статьи ощущается очень остро!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Lazarus и COM

Сообщение Хакер » 17.01.2012 (Вт) 11:27

Денис писал(а):Нет, и в этом основная проблема, практически вся выгугливаемая документация гласит: "Просто киньте компонент на форму, просто укажите библиотеку в мастере, всю черновую работу дэльфи сделает за вас", а мне то как раз и надо выполнить черновую работу, запихнуть ее в свой модуль и юзать в дальнейшем.


Ну так изучай: viewtopic.php?p=56403#56403
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Pascal/Delphi

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList