Главная страница
    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.035 c
2-1156276302
Паша123441435
2006-08-22 23:51
2006.09.10
Таблица


15-1155584405
ronyn
2006-08-14 23:40
2006.09.10
Как создать приложение под разные ОС


3-1152165502
Хой
2006-07-06 09:58
2006.09.10
Закрасить определённую строчку в DBGridEh ?


2-1156172322
Sele
2006-08-21 18:58
2006.09.10
перемещение


15-1155928156
ronyn
2006-08-18 23:09
2006.09.10
Как прописать программно приложение в автозагрузку?





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