![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ссылка на кокласс внутри другого кокласса [D7, WinXP]
Цукор5 © (2006-07-29 02:35:00)Навеяно http://www.delphimaster.ru/cgi-bin/forum.pl?id=1153992363&n=0.Давно хотел сделать нечто подобное.
Делаю так :
type
TPapa = class(TAutoObject, IPapa)
protected
function GetCoClass: IFirst; safecall;
procedure ExecCoClass; safecall; // это от безисходности
end;
//
TFirst = class(TAutoObject, IFirst)
protected
procedure Beep; safecall;
end;
implementation
uses ComServ;
function TPapa.GetCoClass: IFirst;
begin
Result:=(TFirst.Create) as IFirst;
end;
{ TFirst }
procedure TFirst.Beep;
begin
Windows.Beep(800,50);
end;
procedure TPapa.ExecCoClass; // это от безисходности
var Obj:TFirst;
begin
Obj:=TFirst.Create;
Obj.Beep;
//Obj.Free;
end;
Вызываю так :
var Q,QQ:Variant;
begin
Q:=CreateoleObject('Bla.bla');
try
QQ:=Q.GetCoClass;
QQ.Beep;
//Q.ExecCoClass; так тоже не работает.
finally
Q:=UnAssigned;
end;
Получаю EOLEException: Object factory for class TFirst missing
Что сделано неверно ???
Slym (2006-07-31 11:09:00) [1]
type
IProp = interface
['{9FFD3789-9199-4B22-A96D-BE0837916574}']
procedure Beep; safecall;
end;
IObj = interface
['{7C5DE710-DB30-41EA-B1FF-F7BF43C06380}']
function GetProp: IProp; safecall;
end;
TProp = class(TInterfacedObject, IProp)
protected
procedure Beep; safecall;
end;
TObj = class(TInterfacedObject, IObj)
protected
FProp: TProp;
function GetProp: IProp; safecall;
public
constructor Create;
destructor Destroy; override;
end;
implementation
{ TProp }
procedure TProp.Beep;
begin
Windows.Beep(800,50);
end;
{ TObj }
destructor TObj.Destroy;
begin
FProp._Release;
inherited;
end;
function TObj.GetProp: IProp;
begin
result:=FProp as IProp;
end;
constructor TObj.Create;
begin
FProp:=TProp.Create;
FProp._AddRef;
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Obj:IObj;
begin
Obj:=TObj.Create as IObj;
Obj.GetProp.Beep;
Obj.GetProp.Beep;
Obj.GetProp.Beep;
end;
Цукор5 (2006-07-30 22:04:00) [2]Вопрос еще актуален...
Цукор5 (2006-07-29 02:38:00) [3]>Q:=CreateoleObject('Bla.bla');
Вернее так : CreateOleObject('Bla.Papa');
Не принципиально... на всякий случай слепил пару методов в IPapa и проверил их работоспособность. Все Ок. Ошибка только при связи на IFirst.