Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

Ссылка на кокласс внутри другого кокласса   Найти похожие ветки 

 
Цукор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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
1-1153984853
[wl]
2006-07-27 11:20
2006.09.10
Функция удаления тегов из HTML


3-1152195197
solenko
2006-07-06 18:13
2006.09.10
Условие на вычисляемые поля при использовании GROUP BY


1-1154181099
Destroyer
2006-07-29 17:51
2006.09.10
Строковый тип и nil


1-1154337186
Demand
2006-07-31 13:13
2006.09.10
Динамическое создание форм


15-1155914647
тттт
2006-08-18 19:24
2006.09.10
Помогите настоить BIOS.