Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.04 c
15-1155706952
Ega23
2006-08-16 09:42
2006.09.10
С Днём рождения! 16 августа


15-1155621138
Sam Stone
2006-08-15 09:52
2006.09.10
Спиральные галактики


2-1155806582
zdm
2006-08-17 13:23
2006.09.10
MySQL


2-1155812347
ArtemESC
2006-08-17 14:59
2006.09.10
Обязателен ли SysUtils в


2-1156172789
vain
2006-08-21 19:06
2006.09.10
gif и canvas





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский