Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TLB Datei importieren Delphi 7 (https://www.delphipraxis.net/215518-tlb-datei-importieren-delphi-7-a.html)

KlausV 18. Jul 2024 12:30

TLB Datei importieren Delphi 7
 
Hallo Zusammen,
im Zuge der xRECHNUNG Umsetzung möchte ich das Framework von Aloaha nutzen. Die benötigte DLL habe ich mit regasm in die TLB Datei erzeugt.
Dies hat funktioniert und in der TLB Übersicht taucht sie in Delphi 7 auch auf.
Leider bekomme ich dann beim kompilieren eine Fehler "Feld oder Methodenbezeichner" erwartet.

Nun habe ich den link https://stackoverflow.com/questions/...ot-found-error gefunden, der hatte auch Probleme unter D7 und unter D2007 hat es funktioniert.

In der Beschreibung vom Hersteller ist auch eine andere Vorgehensweise genannt. Diese Punkte habe ich aber gar nicht unter D7.
Beschreibung Hersteller:
In der Delphi IDE die Komponente in eine Pascal-Datei umwandeln
Delphi Starten > Projekt öffnen > Menüspalte „Komponente“ > Menüpunkt „Komponente importieren“ > Typenbibliothek importieren > „Aloaha ZUGFeRD Toolkit“ markieren > Button „Weiter“ > Unit-Verz.-Name definieren > Haken bei „Komponenten-Wrapper generieren“ setzen > Button „Weiter“ > Option „Unit anlegen“ auswählen > Button „Fertig stellen anwählen.

Bei mir ist es so:
Projekt > Typbibliothek importieren > Ich wähle die TBL dann aus und drücke auf installiere > wähle neues Package aus > BPL wird installiert und danach kompiliert > dann kommt der Fehler
property TSACert: IUnknown index 28 read GetIUnknownProp write _SetIUnknownProp;

Mache ich etwas falsch? Ich habe das noch nie gemacht.

Danke.
Klaus

Uwe Raabe 18. Jul 2024 13:14

AW: TLB Datei importieren Delphi 7
 
Häng doch mal die entsprechende Unit mit dem Fehler hier an.

KlausV 19. Jul 2024 09:06

AW: TLB Datei importieren Delphi 7
 
Hallo Uwe,
Die pas Datei kann ich leider nicht hochladen, da > 100 KB.

https://www.dropbox.com/scl/fi/fb9t1...=x3clfm2z&dl=0

Ich habe die Prozedur (Zeile 5840) auskommentiert, nun hat die Kompilierung funktioniert.Lt. dem Hersteller wäre diese Prozedur auch nicht nötig.
Wäre aber dennoch toll, wenn du schauen könntest was das Problem ist.
Danke sehr.
Klaus

Uwe Raabe 19. Jul 2024 09:25

AW: TLB Datei importieren Delphi 7
 
Der Vorfahr TOleControl deklariert GetIUnknownProp und SetIUnknownProp. Warum der überflüssige Underscore beim Setter da rein kommt kann ich auch nicht sagen. Wens du den entfernst sollte es gehen.

KlausV 19. Jul 2024 10:14

AW: TLB Datei importieren Delphi 7
 
Vielen Dank, hat funktioniert.

KlausV 24. Jul 2024 09:59

AW: TLB Datei importieren Delphi 7
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich benötige doch noch Hilfe.
Vom Hersteller habe ich ein VB6 Script bekommen, wie man unter VB das Framework nutzt.
Ich habe nun begonnen den VB6 code zu konvertieren, komme aber mit den Komponenten/Aufrufen überhaupt nicht klar.
Ich hoffe, dass jemand Licht ins Dunkel bringt.
Der TLB Import hat funktioniert und ich habe im Reiter ActiveX eine Menge Komponenten.
Wenn ich eine davon auf ein Formular ziehe, dann steht in uses Aloaha_ZUGFeRD_TLB, was schon mal OK ist. Die BPL Datei von Aloaha liegt im Delphi Verzeichnis.
Im Anhang findet Ihr das VB Script und das D7 Script, was ich daraus gemacht habe, bekomme aber massig viele Umwandlungsfehler und bin mir überhaupt nicht sicher, wie ich das angehen kann.
FRM1.TXT = VB6

Es fängt schon bei der Definition an
Dim alo As Aloaha_ZUGFeRD.XML
Set alo = CreateObject("Aloaha_ZUGFeRD.XML")
Hierzu auch ein link der Definition: https://www.zugferdpro.com/posten-au...nung-auslesen/
Wäre cool, wenn jemand helfen könnte.
Gruß Klaus

Uwe Raabe 24. Jul 2024 12:23

AW: TLB Datei importieren Delphi 7
 
Die Deklaration
Delphi-Quellcode:
alo: Aloaha_ZUGFeRD.XML;
und das
Delphi-Quellcode:
alo := CreateOleObject('Aloaha_ZUGFeRD.XML');
kannst du weglassen. Stattdessen einfach eine TXML-Komponente auf das Form setzen und den Code so verwenden wie er ist.

KlausV 24. Jul 2024 12:43

AW: TLB Datei importieren Delphi 7
 
Danke, ja die XML Komponenten von aloaha. Bin jetzt am schauen, weil immer noch zig Fehler zu finden sind.

Uwe Raabe 24. Jul 2024 13:28

AW: TLB Datei importieren Delphi 7
 
Genau. Du setzt im Form-Designer eine Aloha TXML-Komponente auf das Form. Damit wird auch die Aloaha_ZUGFeRD_TLB in die uses-Anweisuung aufgenommen. Die Komponente nennst du dann in "alo" um, damit der Code in der Unit weitestgehend so bleiben kann. Lediglich die Deklaration der lokalen Variable "alo" und deren Initialisierung mit CreateOleObject muss noch weg. Der Rest sollte dann so funktionieren.

KlausV 24. Jul 2024 14:50

AW: TLB Datei importieren Delphi 7
 
Danke sehr.
Das ist aktuell mega mühsam, weil die Prozeduren teilweise optionale Parameter haben und Delphi die alle als mandatory sieht. Evt. hängt das mit dem Inport der Type Library zusammen.
Gibt es in D7 eine Art Object Viewer, wo man alle Parms der Prozeduren sehen kann. Wenn ich auf die Prozedure gehen, dann werden die Parms angezeigt. Bei manchen zeigt er nicht alle an.
In VB6 gibt es wohl so einen Object Viewer.

Delphi.Narium 24. Jul 2024 16:23

AW: TLB Datei importieren Delphi 7
 
Eigentlich kann D7 die Parameter für Funktionen und Prozeduren anzeigen, aber manchmal klappt das zum Verrecken nicht. Warum? Hab' ich in den 22 Jahren, die es D7 gibt, nicht herausfinden können :-(

Nimm bitte alle Dateien, zu denen Du die Quelltexte hast, in das Projekt auf. Im Menü "Projekt" und dann "Dem Projekt hinzufügen" (Umsch+F11). Danach dann Strg+F9. Mit etwas Glück wird es dann besser.

Im Editor den Komponentennamen schreiben, dann den Punkt und Strg+Leertaste. Dann sollte eine Liste der verfügbaren Eigenschaften, Funktionen und Prozeduren, in der Du auch die Parameter sehen kannst, erscheinen. Wenn Du irgendwo Komponentenname.Prozedurename geschrieben hast, auf dem Prozdurename die rechte Maustaste drücken. Im Menü ersten Eintrag ("Deklaration suchen") klicken. Dann sucht D7 Dir die entsprechende Definition im Quelltext. Dort kannst Du dann die erforderlichen Parameter (per Copy&Paste) entnehmen, im Quelltext einfügen und entsprechend den Quelltext anpassen / schreiben.

Uwe Raabe 24. Jul 2024 16:42

AW: TLB Datei importieren Delphi 7
 
Zitat:

Zitat von KlausV (Beitrag 1539169)
Evt. hängt das mit dem Inport der Type Library zusammen.

Mag sein. Eventuell ist das ja in einer neueren Version besser, aber das müsste ich erst ausprobieren.

Allerdings sind bei COM ja nicht zwingend nur die letzten Parameter optional, aber das ginge syntaktisch in Delphi gar nicht.

Zitat:

Zitat von KlausV (Beitrag 1539169)
Gibt es in D7 eine Art Object Viewer, wo man alle Parms der Prozeduren sehen kann. Wenn ich auf die Prozedure gehen, dann werden die Parms angezeigt. Bei manchen zeigt er nicht alle an.

Die Programmierhilfe ist meines Wissens die einzige Option. Wenn die nicht immer alle Parameter anzeigt, dann ist das eventuell eine interne Beschränkung bei der Anzeige.

KlausV 24. Jul 2024 16:54

AW: TLB Datei importieren Delphi 7
 
Sorry, habe mich falsch ausgedrückt.
Der Codevervollständiger funktioniert, d.h. mit Strg Leertaste sehe ich alles. In der pas Datei, die aus der TLB erzeugt wurde sind wohl alle Parms als mandatory definiert, obwohl viele davon optional sind.
Beispiel:
alo.Add_AdditionalReferencedDocument(IssuerAssigne dID, URIID, TypeCode, docdescription); --> 4 Parms im Delphi Programm

In der Aloaha_Zugferd_tlb.pas sind aber 10 definiert:
procedure Add_AdditionalReferencedDocument(const IssuerAssignedID: WideString;
const URIID: WideString; const TypeCode: WideString;
const Name: WideString; const MimeCode: WideString;
const FileName: WideString;
const IssueDateTime: WideString;
const Document_DateFormat: WideString;
const ReferenceTypeCode: WideString;
const MimeType: WideString); dispid 1610744029;

Wie muss ich einen Parm angeben, der als var in der Prozedur definiert ist?
alo.SaveXML('c:\temp\test1.xml', LicenseKey, 0);
in der pas Datei ist es so definiert:
function SaveXML(const XMLPath: WideString; const LicenseKey: WideString;
var ZUGFeRDInvoiceStandard: ZUGFeRDVersion): WordBool; safecall;
ZUGFeRDVersion ist als TOleEnum definiert, warum auch immer.

Dann habe ich noch einen Fehler, den ich auch nicht raus bekomme.
In VB6 definiert:
Dim bla As Object
bla = alo.ZUGFeRD_Structure

In Delphi habe ich es so definiert:
bla: TObject;
bla := alo.ZUGFeRD_Structure;

Fehler: inkompatible Typen TOBJECT und ZUGFeRD.
property ZUGFeRD_Structure: ZUGFeRD read Get_ZUGFeRD_Structure write Set_ZUGFeRD_Structure;

Langsam wird echt mühsam.

Delphi.Narium 24. Jul 2024 17:39

AW: TLB Datei importieren Delphi 7
 
Du musst in D7 alle Parameter angeben. Const heißt, dass Du bei 'nem String einfach '' an der Stelle angeben kannst.

Sinngemäß sowas:
Delphi-Quellcode:
alo.Add_AdditionalReferencedDocument(IssuerAssigne dID, URIID, TypeCode, docdescription, '', '', '', '', '', '');


Alles was Du benötigst übergibst Du entweder als Variabel oder Zeichenfolge in Hochkommata.
Alles was Du nicht benötigst als '' (Leerstring).

Zitat:

In Delphi habe ich es so definiert:
bla: TObject;
bla := alo.ZUGFeRD_Structure;

Fehler: inkompatible Typen TOBJECT und ZUGFeRD.
property ZUGFeRD_Structure: ZUGFeRD read Get_ZUGFeRD_Structure write Set_ZUGFeRD_Structure;
Da ZUGFeRD_Structure vom Typ ZUGFeRD ist:
Delphi-Quellcode:
var
  bla: ZUGFeRD;
begin
  bla := alo.ZUGFeRD_Structure;
  ...
Eigentlich sagt Dir der Kompiler doch schon, was Du ändern musst:

Delphi-Quellcode:
Fehler: inkompatible Typen TOBJECT und ZUGFeRD.


Ersetze in diesem Fall TOBJECT durch ZUGFeRD. Danach sollte der Kompiler zufrieden sein. Bei weiteren Fehlern gehst Du analog vor.

KlausV 24. Jul 2024 18:05

AW: TLB Datei importieren Delphi 7
 
Danke, ist gefühlt 100 Jahre her als ich Delphi noch programmiert hatte. Habe zwar immer Kleinigkeiten gemacht, aber wirklich nicht viel. Hauptsache die Anwendung läuft.

Vlt, eins noch dazu:
Wie muss ich einen Parm angeben, der als var in der Prozedur definiert ist?
alo.SaveXML('c:\temp\test1.xml', LicenseKey, 0);
in der pas Datei ist es so definiert:
function SaveXML(const XMLPath: WideString; const LicenseKey: WideString;
var ZUGFeRDInvoiceStandard: ZUGFeRDVersion): WordBool; safecall;
ZUGFeRDVersion ist als TOleEnum definiert, warum auch immer.

Kas Ob. 24. Jul 2024 18:07

AW: TLB Datei importieren Delphi 7
 
Few things here :
1) Well Delphi.Narium answered this part, Don't trust that every class/type in VB does have the same name in Delphi,
example : in VB an Object is not TObject in Delphi (not even close).

2) In earlier post you did the unthinkable, something you should never ever do with COM, commenting a line !, just for the sake of testing for if it does compile then it is OK, but never leave it commented, the reason for that is ... the methods will be shifted one down ,
example : in you case with commenting line 5840, if you use or access CertBA your code in reality will be calling/accessing CertObj.

3) Uwe answered how when and when in doubt to drop TXML on a form, though i prefer TDataModule to isolate it, but that is irrelevant and up to you, one thing though you still can call CreateOleObject and as per documentation, the parameter from https://docwiki.embarcadero.com/Libr...reateOleObject
Zitat:

ClassName specifies the string representation of the Class ID (CLSID).
So the ClassName (from you uploaded file to dropbox) is one of these
Code:
// *********************************************************************//
// In dieser Typbibliothek deklarierte GUIDS . Es werden folgende        
// Präfixe verwendet:                                                    
//   Typbibliotheken    : LIBID_xxxx                                    
//   CoClasses          : CLASS_xxxx                                    
//   DISPInterfaces     : DIID_xxxx                                    
//   Nicht-DISP-Schnittstellen: IID_xxxx                                      
// *********************************************************************//
const
  // Haupt- und Nebenversionen der Typbibliothek
...

  LIBID_Aloaha_ZUGFeRD: TGUID = '{AF1E54F4-DE27-417C-A34E-9F03B663A22C}';

  IID__INIDatei: TGUID = '{4ECB07A2-B915-3A9F-A543-E8120E8D2F12}';
  IID__EasyIniDatei: TGUID = '{3F574D79-3062-3FB7-87AC-7F494B81E926}';
  IID__IniFileCache: TGUID = '{AF3F5583-F74A-3459-919E-9DE6E93C5019}';
  IID__IniFile: TGUID = '{14629400-4F8C-3548-B141-65473195083D}';
  IID__Win32Cache: TGUID = '{D308DDF8-9038-3331-8C66-AF2163DC1D5F}';
  IID__FileSavedEventHandler: TGUID = '{7C5CAA74-5937-3BEC-9DA3-2820B38EA0CD}';
  IID__IniSection: TGUID = '{BB1EC858-CB3F-3B0D-BC88-2C28E05B70DB}';
  IID__IniKey: TGUID = '{AF7A9D07-1DC1-3477-A204-CEBA63FD55E1}';
  IID__Win32Functions: TGUID = '{BCFCEE28-FDB1-365D-8540-B986865BA477}';
  IID__ReguEx: TGUID = '{99D3C287-24D1-34E7-B77E-D41C718B572E}';
  IID__RegCOMServer: TGUID = '{BCE5A303-6F96-3EE9-8BFB-CE9D79FAB6E2}';
  IID__PlainHelperThreadSafe: TGUID = '{D63EF142-4AAA-3B02-B8A4-4D5824E49884}';
..
..
One you identified your control/class... you can use its declared constant with CreateOleObject

4) You might want to give CnWizard a test with Delphi 7, its autocomplete might works way better than the IDE included one.

Kas Ob. 24. Jul 2024 18:09

AW: TLB Datei importieren Delphi 7
 
Zitat:

Zitat von KlausV (Beitrag 1539185)
Danke, ist gefühlt 100 Jahre her als ich Delphi noch programmiert hatte. Habe zwar immer Kleinigkeiten gemacht, aber wirklich nicht viel. Hauptsache die Anwendung läuft.

Vlt, eins noch dazu:
Wie muss ich einen Parm angeben, der als var in der Prozedur definiert ist?
alo.SaveXML('c:\temp\test1.xml', LicenseKey, 0);
in der pas Datei ist es so definiert:
function SaveXML(const XMLPath: WideString; const LicenseKey: WideString;
var ZUGFeRDInvoiceStandard: ZUGFeRDVersion): WordBool; safecall;
ZUGFeRDVersion ist als TOleEnum definiert, warum auch immer.

What happen if you passed a var declared as TOleEnum ?

jaenicke 24. Jul 2024 20:11

AW: TLB Datei importieren Delphi 7
 
Rein interessehalber:
Kann die Lösung von Aloaha irgendetwas Spezielles? Denn die Lösung ist ja für Delphi technisch nicht sonderlich sinnvoll und macht auch insgesamt einen sehr veralteten Eindruck.

KlausV 25. Jul 2024 07:35

AW: TLB Datei importieren Delphi 7
 
Hallo Sebastian,
ich versuche es mal so zu erklären. Ich benötige ein Tool, welches mir die Arbeit für die XML Erzeugung von ZUGFeRD abnimmt. Es geht hier nicht nur darum, die XML zu erzeugen, sondern anhand von den eingestellten Werten auch die entsprechende ZUGFeRD Variante wie zum Beispiel Extended zu erzeugen. Zusätzlich erfolgt auch noch die Einbindung der XML in die PDF A3.
Ich wollte ursprünglich eine Delphi Komponente nutzen, die war aber leider nicht kompatibel zu Delphi 7.
Aloaha stellt TLB's zu Verfügung, die ich in Delphi dann importiert habe, somit habe ich die Hoffnung, dass ich weiterhin Delphi nutzen kann.
Sollte das nicht funktionieren, dann bleibt noch die Variante der Anbindung von REST API's, da gibt es auch einige tools oder ich gehe einen komplett anderen Weg.
Jetzt möchte ich erst mal versuchen, die demo Anwendung ans laufen zu bekommen, dann sehe ich weiter.

haentschman 25. Jul 2024 08:36

AW: TLB Datei importieren Delphi 7
 
Schau mal hier:
https://www.delphipraxis.net/204583-...xrechnung.html
und hier
https://github.com/LandrixSoftware/XRechnung-for-Delphi

:wink:

KlausV 25. Jul 2024 08:48

AW: TLB Datei importieren Delphi 7
 
Zitat:

Zitat von haentschman (Beitrag 1539192)

kenne ich und beides passt nicht, leider. Mit dem Entwickler von Landrix hatte ich schon mehrfach gesprochen, leider ist es nicht kompatibel mit D7 und kann seine Klassen/Komponenten nicht einbinden. Über die Funktionalität habe ich dann gar nicht weiter geschaut.

Uwe Raabe 25. Jul 2024 08:50

AW: TLB Datei importieren Delphi 7
 
Ich bin mir ziemlich sicher, dass die Units von Sven eben nicht unter Delphi 7 compilieren - zumindest nicht ohne größeren Änderungsaufwand.

KlausV 25. Jul 2024 09:08

AW: TLB Datei importieren Delphi 7
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1539194)
Ich bin mir ziemlich sicher, dass die Units von Sven eben nicht unter Delphi 7 compilieren - zumindest nicht ohne größeren Änderungsaufwand.

ja, das hat er auch so bestätigt.

Delphi.Narium 25. Jul 2024 10:48

AW: TLB Datei importieren Delphi 7
 
Zitat:

Zitat von KlausV (Beitrag 1539185)
Danke, ist gefühlt 100 Jahre her als ich Delphi noch programmiert hatte. Habe zwar immer Kleinigkeiten gemacht, aber wirklich nicht viel. Hauptsache die Anwendung läuft.

Vlt, eins noch dazu:
Wie muss ich einen Parm angeben, der als var in der Prozedur definiert ist?
alo.SaveXML('c:\temp\test1.xml', LicenseKey, 0);
in der pas Datei ist es so definiert:
function SaveXML(const XMLPath: WideString; const LicenseKey: WideString;
var ZUGFeRDInvoiceStandard: ZUGFeRDVersion): WordBool; safecall;
ZUGFeRDVersion ist als TOleEnum definiert, warum auch immer.

Delphi-Quellcode:
var
  ZUGFeRDInvoiceStandard : TOleEnum;
begin
  if SaveXML(XMLPath, LicenseKey, ZUGFeRDInvoiceStandard) then begin
    // Hier mit dem weitermachen, was nach dem Speichern der XML geschehen soll.
    // Muss mit ZUGFeRDInvoiceStandard irgendwas passieren oder kann der Rückgabewert
    // in ZUGFeRDInvoiceStandard ignoriert werden ...?
    ShowMessage('SaveXML erfolgreich ausgeführt.');
  end else begin
    // Hier näturlich eine sinnvolle Fehlerbehandlung einbauen.
    ShowMessage('SaveXML war nicht erfolgreich.');
  end;
end;

KlausV 25. Jul 2024 11:18

AW: TLB Datei importieren Delphi 7
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1539202)
Zitat:

Zitat von KlausV (Beitrag 1539185)
Danke, ist gefühlt 100 Jahre her als ich Delphi noch programmiert hatte. Habe zwar immer Kleinigkeiten gemacht, aber wirklich nicht viel. Hauptsache die Anwendung läuft.

Vlt, eins noch dazu:
Wie muss ich einen Parm angeben, der als var in der Prozedur definiert ist?
alo.SaveXML('c:\temp\test1.xml', LicenseKey, 0);
in der pas Datei ist es so definiert:
function SaveXML(const XMLPath: WideString; const LicenseKey: WideString;
var ZUGFeRDInvoiceStandard: ZUGFeRDVersion): WordBool; safecall;
ZUGFeRDVersion ist als TOleEnum definiert, warum auch immer.

Delphi-Quellcode:
var
  ZUGFeRDInvoiceStandard : TOleEnum;
begin
  if SaveXML(XMLPath, LicenseKey, ZUGFeRDInvoiceStandard) then begin
    // Hier mit dem weitermachen, was nach dem Speichern der XML geschehen soll.
    // Muss mit ZUGFeRDInvoiceStandard irgendwas passieren oder kann der Rückgabewert
    // in ZUGFeRDInvoiceStandard ignoriert werden ...?
    ShowMessage('SaveXML erfolgreich ausgeführt.');
  end else begin
    // Hier näturlich eine sinnvolle Fehlerbehandlung einbauen.
    ShowMessage('SaveXML war nicht erfolgreich.');
  end;
end;

so hatte ich es auch schon versucht, aber es kommt [Fehler] Form1_.pas(53): Undefinierter Bezeichner: 'TOleEnum'.

In der aloaha pas Datei ist das so definiert:

// Konstanten für enum ZUGFeRDVersion
type
ZUGFeRDVersion = TOleEnum;
const
ZUGFeRDVersion_auto = $00000000;
ZUGFeRDVersion_ZUGFeRD = $00000001;
ZUGFeRDVersion_xInvoice = $00000002;

function SaveXML(const XMLPath: WideString; const LicenseKey: WideString;
var ZUGFeRDInvoiceStandard: ZUGFeRDVersion): WordBool; safecall;

Zusätzlich habe ich noch das problem, dass die ZUGFeRD Version ein optionaler Parm ist, d.h. wenn ich jetzt hier etwas mitgebe, dann wird das ja entsprechend umgesetzt. Bei den anderen optionalen Params war es ja einfach mit '', aber hier, was macht wohl die Funktion dann daraus? Normalerweise müsste hier auch etwas wie '' mitgegeben werden.

Delphi.Narium 25. Jul 2024 11:34

AW: TLB Datei importieren Delphi 7
 
Naja: Cursor auf TOleEnum setzen, F1 drücken und in der Hilfe nachschauen, in welcher Unit TOleEnum definiert ist. Diese Unit in der Uses-Klausel hinzufügen.
Delphi-Quellcode:
uses
  ..., Activex;

KlausV 25. Jul 2024 12:17

AW: TLB Datei importieren Delphi 7
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1539209)
Naja: Cursor auf TOleEnum setzen, F1 drücken und in der Hilfe nachschauen, in welcher Unit TOleEnum definiert ist. Diese Unit in der Uses-Klausel hinzufügen.
Delphi-Quellcode:
uses
  ..., Activex;

Danke, hat funktioniert. Programm lässt sich nun kompilieren:-D. Im ersten Schritt wurde eine XML erzeugt und auch mit einer bestehenden PDF Datei als PDF/A-3 erzeugt.
Bei einem anderen test bricht das Programm mit einem Speicherfehler ab. Auch das Beenden von Delphi und Start der EXE hat leider nichts gebracht. Jetzt geht es richtig ins eingemachte rein.

Delphi.Narium 25. Jul 2024 12:28

AW: TLB Datei importieren Delphi 7
 
Speicherfehler heißt was?

Fehlermeldung per Strg+C kopieren und hier einfügen, dann können wir (eventuell) sehen, was da schief geht.

Häufigste Ursache:

Es wurde auf eine Variabel zugegriffen, die nicht initialisiert wurde.

Die IDE kann nix dafür, das ist mit (sehr hoher) Wahrscheinlichkeit ein Fehler im Quelltext.

Programm im Debugger starten: im Menü "Tools" den Unterpunkt "Debugger-Optionen..." aufrufen und dort unten Links 'nen Haken bei "Integrierte Fehlersuche" setzen. Programm in der IDE starten und schauen ob bei dem Fehler der Debugger Dir die fehlerhafte Stelle anzeigt.

Wenn nicht: Bei Speicherfehlern / Zugriffsverletzungen steht in der Fehlermeldung immer die Adresse, an der der Fehler auftritt. Diese Adresse nehmen und dann im Menü "Suchen" den Unterpunkt "Laufzeitfehler suchen..." aufrufen und dort die Fehleradresse eingeben. Mit etwas Glück kommst Du dann an die Stelle, an der der Fehler auftritt. Von dort musst Du dann im Quelltext suchen, was da eventuell nicht initialisiert wurde ...

KlausV 26. Jul 2024 10:27

AW: TLB Datei importieren Delphi 7
 
Moin,
zur Fehlermeldung.
Im debug mode gehe ich mit F7 step by step durch.
1. function TXML.Get_ZUGFeRD_Structure: ZUGFeRD;
begin
Result := DefaultInterface.ZUGFeRD_Structure;
end;
Wenn ich mir den Inhalt von Structure anschaue, dann sieht das gut aus.
((0, 1, 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0'), ('47110815', '', 380, '20240531', '102', 0, ), ('N999-11111-22', 'KundenNummer', ('', ''), 'Muster GmbH', 'Karl Mustermann', 'Einkauf', '+490000', '', 'stefan@aloaha.com', '49479', 'Bahnhofstraße 1', 'Wohnung 2', ), ('4711', ('', ''), 'Aloaha Limited', 'John Doe', 'Sales Department', '+490000', '', 'stefan@aloaha.com', 'PBK1131', 'Helgoland', 'Triq Gio Felice Inglott', ), (('', '', ('', ''), '', '', '', '', '', '', '', '', '', '', '', '', '', nil, ('', '', '', '', '', '', '', ('', '', ''), ''), nil, nil, ('', '')), ('20120608', '102'), ('', '', '', '', '', '', '', ('', '', ''), ''), ('', '', '')), (('', '', ('', ''), '', '', '', '', '', '', '', '', '', '', '', '', '', nil, ('', '', '', '', '', '', '', ('', '', ''), ''), nil, nil, ('', '')), '47110815', '', 'EUR', nil, (('', ''), ('', '')), nil, nil, nil, nil, (('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', ''), ('', '')), ('', '', ''), ('', ''), nil, nil, nil), nil, (0, 0))

2. function TXML.GetDefaultInterface: _XML;
begin
if FIntf = nil then // Inhalt FIntf = Pointer($84D0030) as _XML
Connect;
Assert(FIntf <> nil, 'DefaultInterface ist NULL. Die Komponente ist nicht mit dem Server verbunden. Sie müssen vor dieser Operation ''Connect'' oder ''ConnectTo'' aufrufen');
Result := FIntf;
end;
Nach dem Verlassen der Funktion kommt dann die Fehlermeldung: Eine Exception ist in der Klasse EOlException aufgetreten. Nicht genügend Speicher verfügbar um das Programm weiterhin auszuführen.
Danke schon mal.

KlausV 31. Jul 2024 14:45

AW: TLB Datei importieren Delphi 7
 
Nun läuft das Beispiel Projekt mit allen Funktionen, selbst late oder early binding ist möglich.
Bei early binding habe ich das Problem, dass neue Versionen der DLL immer Probleme verursacht haben, d.h. TLB importieren und Projekt neu umwandeln. Leider gehen bei late binding alle Vorteiler vom Editor flöten, kein Hint, kein Syntax Check, etc.
Muss nun überlegen, was die bessere Wahl ist.
Evt. unter early binding entwickeln aber unter late binding ausliefern, mindestens mal so lange bis alle Kinderkrankheiten beseitigt sind.

KlausV 8. Nov 2024 16:10

AW: TLB Datei importieren Delphi 7
 
Hallo Zusammen,
bis gestern war ich sehr guter Dinge, alles hat funkioniert, auch die updates liefen immer wieder sauber durch.
Ich habe heute eine neue Version von alaoah eingespielt. Beim TLB Import gab es Probleme. Ok, dachte ich kein Problem. Nun gab es aber Probleme beim Start der Anwendung. Ok, habe dann alles deinstalliert und die alte lauffähige Version installiert. Die TLB lässt sich einbinden, doch nun sobald eine Zugriff auf aloaha erfolgt bricht das Programm direkt mit Speicherfehler ab.
Habe dann alles was mit aloaha zu tun entfernt, sämtliche dcu, pas, dpk, etc.
Ok, wieder auf Anfang zurück. Habe die dll über regasm64 registriert, alles wie früher.

Ok, wieder alles deinstalliert und installiert, keine Verbesserung. Sobald etwas angesprochen wird. Es sieht so aus, dass keine OLE Verbindung aufgebaut werden kann.


Im debug kommt er bis zum end und dann knallt es : In der Variable Flntf steht auch was drin.

function TXML.GetDefaultInterface: _XML;
begin
if FIntf = nil then
Connect;
Assert(FIntf <> nil, 'DefaultInterface ist NULL. Die Komponente ist nicht mit dem Server verbunden. Sie müssen vor dieser Operation ''Connect'' oder ''ConnectTo'' aufrufen');
Result := FIntf;
end;

Bei End steigt er mit Speicherfehler aus.

Zugriffsverletzung bei Adresse 76DBEC64 in Modul oleaut32.dll.

Hat jemand eine Idee, was es bei TLB's noch zu beachten gibt.
Ich komme aktuell echt nicht weiter.

Kann es vielleicht auch an Windows liegen, wobei aktuell im Windows updateverlauf nichts aktuelles steht.

Danke.
Klaus

Bernhard Geyer 9. Nov 2024 16:09

AW: TLB Datei importieren Delphi 7
 
Kannst du Tests mit neueren Delphis machen?
Und welche OS wird genutzt? Evtl. hat ja die neue Version ein Problem mit der OS-Version, da diese zu alt ist.

KlausV 11. Nov 2024 15:19

AW: TLB Datei importieren Delphi 7
 
Habe leider keine neuere Delphi Version. Das System ist ein W10 System mit aktuellen Patches.

Es muss irgendwie an den assemblies liegen, da diese ja für .net registriert werden müssen.

Ich musste nun einen komplett restore meines Entwicklunsgrechners machen und bin aktuell auf der letzten Version die lauffähig war. Auf eine höhere Version zu gehen lasse ich erst mal.

Bernhard Geyer 12. Nov 2024 11:03

AW: TLB Datei importieren Delphi 7
 
Zitat:

Zitat von KlausV (Beitrag 1543034)
Habe leider keine neuere Delphi Version.

Mit der CE-Edition sollte hier ein Test relativ einfach möglich sein.
Und wenn du das dann nicht als Prod-Version nutzt, sollte auch die Einschränkung der kostenlosen CE-Edition im geschäftlichen Umfeld kein Problem sein.

KlausV 12. Nov 2024 11:46

AW: TLB Datei importieren Delphi 7
 
Danke Dir, das Problem ist, dass wir für D7 die DevExpress Komponenten und auch eigene verwenden. Diese müssten nach lizenziert werden und DevExpress ist schon sehr teuer. Die haben wir auch im .net Umfeld.
Wie kann es sein, dass es an Delphi liegen soll?
Ich werde einen 2. Rechner aufsetzen und dann noch einmal testen, was das Problem ist. Aktuell läuft das Produktivsystem mit einem älteren Stand wieder.

KlausV 27. Nov 2024 23:22

AW: TLB Datei importieren Delphi 7
 
Hallo,
Ich habe nun den Klon des Entwicklungsrechners endlich aufgesetzt und kann "spielen".
Leider muss ich sagen, dass auch mit einer neuen Version des Softwareherstellers die neuen Versionen einfach nicht mehr funktionieren.
Ich benötige Hilfe um auch zu verstehen, wie das mit dem Einbinden der TLB Datei und auch mit REGASM funktioniert. Hier gibt es die 32 bit und 64 bit Versionen. D7 ist 32 bit, während das .Net Framework in der 4er Version sicher 64 bit hat.
Wie gesagt bis zur 0.69 Version des Softwareherstellers hat alles funktioniert, nun klappt leider nichts mehr und ich bin mega ratlos, zumal ich auch nicht eingrenzen kann, was das Problem ist und wieso es plötzlich auftritt. Laut Hersteller der Software wurde nichts gravierendes gemacht, was auf dieses Problem irgendwie deuten könnte. Beim Import der TLB wird sofort mitgeteilt, dass sehr wahrscheinlich irgendeine Registrierung einer DLL fehlt. Wie kann ich sehen, welche Dll's registriert sind und wie, sprich 32bit/64bit? Ich vermute, dass dies irgendwo in den Tiefen der Registry steht.
Vielleicht kann jemand helfen, der sich mit einbinden von TLB's auskennt und sagen kann wie ich mich dem Problem nähern kann. Ich könnte auch bei Interesse in einer Teamssession zeigen, was ich mache und was passiert.
Vielen Dank schon mal.
Klaus

Delphi.Narium 27. Nov 2024 23:47

AW: TLB Datei importieren Delphi 7
 
Mit dem ProcMon die Zugriffe von Delphi auf die Registry, während der Registrierung der TLB, überwachen.

Danach dort die Protokolleinträge suchen (mit 'ner ClassID), die nicht erfolgreich waren.
Davon die ClassID nehmen und versuchen herauszufinden wozu sie gehören.
Mir hat dabei mal die Nutzung 'ner KI geholfen, frei nach dem Motto:

Zu welcher Software gehört die ClassID (hier die aus dem ProcMon-Protokoll einfügen)?

Eventuell hast Du ja Glück und kommst dem Problem auf die Schliche.

KlausV 28. Nov 2024 08:25

AW: TLB Datei importieren Delphi 7
 
Danke, habe ProcMon mal gestartet, Wahnsinn was da alles protokolliert wird. Habe mal jetzt nur Delpi32 unter Beobachtung, aber ist schon einiges, was hier passiert.

Eine Frage zu REGASM, welche REGASM Version sollte genommen werden -86 oder -64?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 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