Форум: "Основная";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];
ВнизСсылка на кокласс внутри другого кокласса Найти похожие ветки
← →
Цукор5 (2006-07-29 02:35) [0]Навеяно http://delphimaster.net/view/1-1153992363/. Давно хотел сделать нечто подобное.
Делаю так :
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
Что сделано неверно ???
← →
Цукор5 (2006-07-29 02:38) [1]>Q:=CreateoleObject("Bla.bla");
Вернее так : CreateOleObject("Bla.Papa");
Не принципиально... на всякий случай слепил пару методов в IPapa и проверил их работоспособность. Все Ок. Ошибка только при связи на IFirst.
← →
Цукор5 (2006-07-30 22:04) [2]Вопрос еще актуален...
← →
Slym © (2006-07-31 11:09) [3]
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;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c