Главная страница
    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.45 MB
Время: 0.045 c
8-1140628607
Sour Smile
2006-02-22 20:16
2006.09.10
Как правильно нарисовать дым?


15-1155525280
atruhin
2006-08-14 07:14
2006.09.10
Литература о тестировании ПО


3-1151753384
Muchacho
2006-07-01 15:29
2006.09.10
Установка Fast Report 3.x в Delphi 2006 .NET


15-1155342176
belly_tiamat
2006-08-12 04:22
2006.09.10
Протокол HILTI дальномер PD28


2-1156198672
Ref
2006-08-22 02:17
2006.09.10
DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский