Hi zusammen
Vorausschicken muss ich: Ich habe noch nie etwas mit
Com und/oder Interfaces gemacht und habe desshalb damit Null Erfahrung. Das einzige, was ich verbuchen kann, sind die unzähligen Beiträge im Netz, die ich in den letzten Tagen zusammengesucht habe (und ein vor vielen Jahren nachgebautes Beispiel mit Word und CreateOleObject).
Ich habe die Typbibliothek des PDFCreators importiert (ohne Komponentenwrapper z erstellen). Dabei gibt es Konstrukte wie:
Delphi-Quellcode:
IQueue = dispinterface
['{3803F46C-F5AA-4B86-8B9C-6EFFAC9CDCFA}']
procedure Initialize; dispid 1610743808;
function WaitForJob(timeOut: Integer): WordBool; dispid 1610743809;
function WaitForJobs(jobCount: Integer; timeOut: Integer): WordBool; dispid 1610743810;
property Count: Integer readonly dispid 1610743811;
property NextJob: IPrintJob readonly dispid 1610743812;
function GetJobByIndex(jobIndex: Integer): IPrintJob; dispid 1610743813;
procedure MergeJobs(const job1: IPrintJob; const job2: IPrintJob); dispid 1610743814;
procedure MergeAllJobs; dispid 1610743815;
procedure Clear; dispid 1610743816;
procedure DeleteJob(index: Integer); dispid 1610743817;
procedure ReleaseCom; dispid 1610743818;
end;
Dieses Interface versuche ich nun, in einer Klasse zu nutzen:
Delphi-Quellcode:
type
TCustomCreatePDFClass = class(TPersistent)
{private}
FPDFCreator: IPDFCreator;
FPrinters : IPrinters; //,
FPrintJob : IPrintJob;
FPrintJobInfo : IPrintJobInfo;
FQueue : IQueue;
FJobFinishedEvent : IJobFinishedEvent;
{public}
procedure CreatePDFCreator;
procedure InitializeQueue;
end;
und:
Delphi-Quellcode:
procedure TCustomCreatePDFClass.InitializeQueue(TInterfacedObject, IQueue);
begin
FQueue := CoQueue.Create;
FQueue.Initialize;
FQueue.WaitForJob(10); // Bis hierhin scheint alles in Ordnung zu sein
FPrintJob := FQueue.NextJob; // Hier meckert Delphi, IQueue hätte kein Element Namens 'NextJob'
FPrintJob.NextJob; // Hier meckert Delphi, IPrintJob hätte kein Element Namens 'NextJob'
FPrintJob.SetProfileSetting();
end;
Dabei versuche ich, nach diesen
Anweisungen vorzugehen - ob ich allerdings bis jetzt auch nur ansatzweise auf dem richtigen Dampfer bin, weiss ich (noch) nicht.
Ich hab mich auch schon versucht, über Propertys in Interfaces schlau zu machen:
https://stackoverflow.com/questions/...and-properties
https://stackoverflow.com/questions/...rty-visibility
https://www.delphipraxis.net/65692-p...interface.html
Wobei mir gerade jetzt Beittrag 6 im letzten verlinkten Beitrag aufgefallen ist (die Methodenzuordnungsklauseln). Trotzdem ist mir da einiges nicht klar. In dem Beispiel ist das Interface-Property so deklariert:
Delphi-Quellcode:
ISample = interface
function getValue : Integer;
procedure setValue(value : Integer);
property Value : Integer read getValue write setValue;
end;
Meine Interface-Propertys hingegen so:
Delphi-Quellcode:
property Count: Integer readonly dispid 1610743811;
property NextJob: IPrintJob readonly dispid 1610743812;
An Implementierungen enthält die TLB gerade mal die Classfunctions Create und CreateRemote.
Ich denke, ich habe da noch einiges nicht verstanden. Wie stark liege ich daneben, wenn ich von der Idee ausgehe: Indem ich die von dem Interface angegebenen Methoden in meiner Klasse implementiere, überschreibe ich allfällige Implementierungen des Ursprungsobjekts (hier also PDFCreator)?
Oder hab ich bislang weniger als nichts begriffen?
Gruss
Delbor