![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интерфейсные объекты [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]Что такое интерфейсный объект?
В любом случае интерфейс это интерфейс а объект его реализующий это объект. Клиент ничего об этом объекте не знает но это не значит что объект не нужно создавать. За это отвечаешь ты.