Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интерфейсные объекты [D7, WinXP]


TStas ©   (2005-10-23 19:28:00) 

Если я напишу интерфейсный объект и интерфейс к нему, как через интерфейс вызвать его методы? Например, если я через COM работаю с экселем, естественно, я сначала его объект создаю. А здесь как? Или я чего-то никак понять не могу. Просто запустить программу, содержащую интерфейсный объект?


Sergey Masloff   (2005-10-24 20:22:00) [1]

По нормальному без регистрации никак. Именно из реестра подсистема COM поймет в каком бинарном файле реализация интерфейса которую нужно использовать.


TStas   (2005-10-24 19:02:00) [2]

И без регистрации никак? К сожалению, у Фаранова это не написано. Что-то про регистрацию было у Фленова, притом про ручную. Просто хотел научиться ими пользоваться


Sergey Masloff   (2005-10-23 21:23:00) [3]

Для вызова из внешней программы нужно в реестре регистрировать. Тогда подсистема COM может его найти и отдать клиенту. Наследоваться лучше от какого-нибудь TTypedComObject но рассказывать это все довольно долго.
 Почитай может все же у Фаронова это описано. Не знаю. По крайней мере в 2-3 постах в форуме это не опишешь.


TStas   (2005-10-23 20:33:00) [4]

>Sergey Masloff
Да именно это я и имею в виду. А вот как теперь обращаться к нему из другой программы? Термин "интерфейсный объект" я не сам придумал, так они названы в "Искусстве создания компонентов" Фаронова. Ведь чтобы обращаться к методу объекта, он должен быть создан.


Sergey Masloff   (2005-10-23 20:02:00) [5]

Ты имеешь в виду что-то в этом роде?

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComObj;

type
 IMyIntf = interface ['{D9831FCC-6064-4883-AB6B-A9A3A5694F36}']
   procedure Foo();
 end;

 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 TMyObj = class(TInterfacedObject, IMyIntf)
   destructor Destroy; override;
 protected
   procedure Foo();
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TMyObj }

destructor TMyObj.Destroy;
begin
 ShowMessage('Destroy');
 inherited;
end;

procedure TMyObj.Foo;
begin
 ShowMessage('Foo');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 iface : IMyIntf;
begin
 iface := TMyObj.Create();
 iface.Foo;
end;

end.


Sergey Masloff   (2005-10-23 19:48:00) [6]

Что такое интерфейсный объект?

В любом случае интерфейс это интерфейс а объект его реализующий это объект. Клиент ничего об этом объекте не знает но это не значит что объект не нужно создавать. За это отвечаешь ты.


Наверх

Титульная страница Поиск, карта сайта Написать письмо