AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verständnisfrage zu Com und Interface-Propertys
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage zu Com und Interface-Propertys

Ein Thema von Delbor · begonnen am 22. Aug 2018 · letzter Beitrag vom 13. Sep 2018
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Verständnisfrage zu Com und Interface-Propertys

  Alt 23. Aug 2018, 10:02
Hi zusammen
Verzichtest Du aus didaktischen Gründen auf den Komponentenwrapper?
Sherlock
Nein, das war eigentlich nicht meine Absicht. Bei meinen Versuchen, Paperport fernzusteuern wurden mir die Dinger "automatisch" installiert, (ich hatte das entsprechende Häkchen im Importdialog übersehen), wonach ich dann 32 dieser Dinger auf der Toolbox kleben hatte. Angesichts der Tatsache, dass ich die Typbibliotheken gerade mal für eine Anwendung brauche, schien mir dies zuviel des guten.
Andrerseits ists ja schon so: ich lerne mehr, wenn mir die Arbeiten nicht einfach so abgenommen werden - ich hatte mir schon überlegt, die TLB wieder zu löschen und mit dem Wrapper neu zu importieren. Vom Lerneffekt her ist es aber ganz gut, dass ichs nicht getan habe.

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;
Mit den hier gezeigten Deklarationen sollte das aber schon gehen. Häng doch mal ein Minimalprojekt an, mit dem wir das Problem reproduzieren können.
So ein Minimalprojekt müsste ich erst noch entwerfen - das Testprojekt ist dafür wohl eher schon zu gross. Aber ich hänge hier mal die erzeugte TLB an. Ich denke, das würde dir wohl schon einiges nützen.

Was den Zugriff auf den PDFCreator angeht - da existiert ausser den obigen Zeilen eigentlich noch gar nichts ausser leeren Methodenrümpfen.

Gruss
Delbor
Angehängte Dateien
Dateityp: pas PDFCreator_COM_TLB.pas (14,8 KB, 2x aufgerufen)
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verständnisfrage zu Com und Interface-Propertys

  Alt 23. Aug 2018, 10:42
Also, den Fehler Hier meckert Delphi, IQueue hätte kein Element Namens 'NextJob' kann ich hier nicht reproduzieren. Allerdings hat der Fehler Hier meckert Delphi, IPrintJob hätte kein Element Namens 'NextJob' durchaus seine Berechtigung.

Du könntest der Vollständigkeit noch deine Version der mscorlib_TLB.pas anhängen. Vielleicht bringt die noch ein paar Erkenntnisse.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Verständnisfrage zu Com und Interface-Propertys

  Alt 23. Aug 2018, 11:07
Hi Uwe Raabe

Die liegt im selben Verzeichnis wie die PDFCreator_COM_TLB - das Problem ist: ich habe keine Ahnung, woher die kommt. Ich dachte erst, das sei eine Typbibliothek, um Windows fernzusteuern - WMI oder sowas, doch das scheint nicht der Fall zu sein. Ich habe allerdings auch nicht weiter gesucht, da ich erstmal mit dem vorliegenden Projekt klarkommen muss. Nun findest du sie im Anhang.

Gruss
Delbor
Angehängte Dateien
Dateityp: zip mscorlib_TLB.zip (169,2 KB, 2x aufgerufen)
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#4

AW: Verständnisfrage zu Com und Interface-Propertys

  Alt 23. Aug 2018, 12:19
Die mscorlib_TLB wird vond er PDFCreator_COM_TLB benötigt. Interessanterweise gibt es in der mscorlib_TLB auch eine Co-Klasse CoQueue, weswegen die Reihenfolge in der Uses-Anweisung von Belang wäre. Allerdings gäbe es da andere Fehler.

Der folgende Text compiliert hier ohne Probleme:
Delphi-Quellcode:
procedure Main();
var
  FQueue: IQueue;
  FPrintJob: IPrintJob;
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' --- hier nicht!
// FPrintJob.NextJob; // Hier meckert Delphi, IPrintJob hätte kein Element Namens 'NextJob' --- Das ist auch korrekt so.
  FPrintJob.SetProfileSetting('Hurz', 'Hurz');
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.192 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Verständnisfrage zu Com und Interface-Propertys

  Alt 13. Sep 2018, 10:45
Hi zusammen

Sorry, wenn es etwas gedauert hat. Da ist mir einiges dazwischengekommen - unter anderem habe ich nun auch so eine Minimalanwendung erstellt.
Die Anwendung entstand aus einer Vorlage, die ich mir mit Delphi Tokio 10.2.3 als Test für neue Komponenten erstellt hatte.
Im Wesentlichen enthalten sind ein ScanningFrame, mit dem eine Bitmap vom Scanner eingelesen werden kann, die PDFCreator_COM_TLB(..) sowie mein bisheriger Entwurf für eine Klasse, die sich mit vom PDFCreator eine durchsuchbare PDFerstellen lassen soll.

Diese ist bislang wie folgt deklariert:
Delphi-Quellcode:
  TCustomCreatePDFClass = class(TPersistent)

  private {private}
    FFilename: WideString;
    FPDFCreator: IPDFCreator;
    FPrinters : IPrinters; //,
    FPrintJob : IPrintJob;
    FPrintJobInfo : IPrintJobInfo;
    FQueue : IQueue;
    FJobFinishedEvent : IJobFinishedEvent;

   public {public}
      procedure CreatePDFCreator;
      procedure InitializeQueue;
      procedure ConvertToPdf;
// procedure GetPDFCreatorPrinters;
      property FileName: WideString read FFilename write FFilename;

  constructor Create(AOwner: TPersistent);
  destructor Destroy; override;

  end;
Der Constructor:
Delphi-Quellcode:
constructor TCustomCreatePDFClass.Create(AOwner: TPersistent);
begin
   inherited Create;
   FPDFCreator := CoPdfCreatorObj.Create;

   FPrintjob := CoPrintjob.Create ;
   FPrintJobInfo := CoPrintJobInfo.Create;
   FPrinters := CoPrinters.Create as IPrinters;
   FQueue := CoQueue.Create as IQueue;

   FPDFCreator.AddFileToQueue(FFileName);
// FPDFCreator.PrintFile(FFileName); CreateComObject ; ('{9616B8B3-FE6E-4122-AC93-E46DBD571F87}' IPrintjobInfo
   InitializeQueue;
end;
Diese Zeilen sollen die entsprechenden Klassenmethoden in der PDFCreator_COM_TLB aufrufen. im Falle der Zeile 2 funktioniert das auch problemlos, nicht aber bei Zeile 3. Die Methode wird zwar aufgerufen und abgearbeitet, dann aber wird ein Fehler erzeugt:

Zitat:
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt PDFSynOfficer.exe ist eine Exception der Klasse EOleSysError mit der Meldung 'Klasse nicht registriert' aufgetreten.
Klicke ich hier auf 'Fortsetzen, erhalte ich die nächste Meldung:

Zitat:
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt PDFSynOfficer.exe ist eine Exception der Klasse EOleSysError mit der Meldung 'Klasse nicht registriert, ClassID: {9616B8B3-FE6E-4122-AC93-E46DBD571F87}' aufgetreten.
Nach meinen Infos ist es der Server, der sich beim System registrieren muss, ich hab da also nichts ausgelassen. Ich denke aber, dass dieser die Registrierung sehr wohl vornimmt.
Nachprüfen kann ich das nicht - der PDFCreator soll zwar Opensource sein, ich habe aber nirgendwo entsprechende Sourcen gefunden.

Andrerseits hab ich noch etliche Beispiele in diversen Programmiersprachen gefunden. Die finden sich im Installationsordner des PDFCreators. Eines dieser Beispiele lege ich dem Anhang bei - es ist in C# geschrieben. Ein Delphi-Beispiel fehlt leider, doch denke ich, dass die Syntax am ähnlichsten ist.

Gruss
Delbor
Angehängte Dateien
Dateityp: zip PDFOfficerMini DP.zip (3,06 MB, 4x aufgerufen)
Dateityp: zip COM_TestForm.zip (79,9 KB, 1x aufgerufen)
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz