uno_pascal_bridge

Antworten
moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

uno_pascal_bridge

Beitrag von moritz »

Hallo,
angeregt durch das neue Lazarus-Buch hab ich mal wieder mit Lazarus versucht, eine delphi5- Datenbankanwendung für Linux nutzbar zu machen.
Die letzten Versuche hab ich mit Kylix vor über 5 Jahren unternommen.
Mit delphi kenn ich mich als Bastler halbwegs aus, mit Lazarus kaum.
Im Moment teste ich verschiedene Bausteine, ob das mit Lazarus machbar ist. Ein großes Problem ist immer noch der für mich unbbedingt notwendige Datenaustausch mit OpenOffice Calc, Writer und Base.
Hat sich schon mal jemand mit der uno_pascal_bridge beschäftigt? Leider ist das package wohl in erster Linie für delphi und Kylix geschrieben und nicht für Lazarus bzw. FreePascal. Ein paar Sachen konnte ich beheben. Im Moment scheitere ich aber daran:
uno_pascal_struct.pas

Code: Alles auswählen

function TUNO_Pascal_Struct.ConvertMembersAndCalcStructSize: Integer;
var
  tmp_ppName: pprtl_uString;
  tmp_ppMemberTD: pp_typelib_TypeDescriptionReference;
  tmp_pMemberOffsets : psal_Int32;
  i: integer;
begin
  SetLength(tmpStructMembersArray, pUNOStructureTD^.aBase.nMembers);
 
  tmp_ppMemberTD := pUNOStructureTD^.aBase.ppTypeRefs;
  tmp_ppName := pUNOStructureTD^.aBase.ppMemberNames;
  tmp_pMemberOffsets := pUNOStructureTD^.aBase.pMemberOffsets;
 
  Result := 0;
 
  for i := 0 to pUNOStructureTD^.aBase.nMembers-1 do begin
    tmpStructMembersArray[i].ParamTD := tmp_ppMemberTD^;
    tmpStructMembersArray[i].ParamOffset := tmp_pMemberOffsets^;
 
    tmpStructMembersArray[i].ParamName := rtl_uString_to_String(tmp_ppName^);
 
    Result := Result+AlignSize(tmp_ppMemberTD^.pType)//*Compilerfehler
 
    inc(tmp_ppMemberTD);
    inc(tmp_ppName);
    inc(tmp_pMemberOffsets);
  end;
end;


Es kommt folgender Compilerfahler:
/home/moritz/Projects/Lazarus/uno_pascal_bridge_v0.9.2_src/uno_pas_Kernel/uno_pascal_struct.pas(112,48) Error: Illegal qualifier
/home/moritz/Projects/Lazarus/uno_pascal_bridge_v0.9.2_src/uno_pas_Kernel/uno_pascal_struct.pas(112,48) Hint: may be pointer dereference is missing
/home/moritz/Projects/Lazarus/uno_pascal_bridge_v0.9.2_src/uno_pas_Kernel/uno_pascal_struct.pas(112,48) Fatal: Syntax error, ")" expected but "identifier PTYPE" found
Deklariert ist tmp_ppMemberTD^ in uno_typelib_TypeDescription.pas

Code: Alles auswählen

typelib_TypeDescription = _typelib_TypeDescription;
 
   // Holds a weak reference to a type description.
  _typelib_TypeDescriptionReference = record
    //   reference count of type; don't ever modify this by yourself, use
    //     typelib_typedescriptionreference_acquire() and typelib_typedescriptionreference_release()
    nRefCount : sal_Int32;
    //   number of static references of type, because of the fact that some types are needed
    //     until program termination and are commonly held static.
    nStaticRefCount : sal_Int32;
    //   type class of type
    eTypeClass : typelib_TypeClass;
    //   fully qualified name of type
    pTypeName : prtl_uString;
    //   pointer to full typedescription; this value is only valid if the type is never swapped out
    pType : p_typelib_TypeDescription;
    //   pointer to optimize the runtime; not for public use
    pUniqueIdentifier : pointer;
    //   reserved for future use; 0 if not used
    pReserved : pointer;
  end;
  typelib_TypeDescriptionReference = _typelib_TypeDescriptionReference;


Leider hab ich keine Ahnung, warum hier eine Fehlermeldung kommt. Hat jemand einen Tip dazu?
Oder wie müsste man am besten anfangen, das packet für Lazarus und Linux anzupassen? Oder kennt jemand eine bessere Möglichkeit, Daten zwischen Openoffice und einer Datenbank (Firebird) unter Linux auszutauschen?

Vielen Dank für eure Mühe.
Moritz

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: uno_pascal_bridge

Beitrag von knight »

moritz hat geschrieben: Oder kennt jemand eine bessere Möglichkeit, Daten zwischen Openoffice und einer Datenbank (Firebird) unter Linux auszutauschen?

Vielen Dank für eure Mühe.
Moritz


Je nach dem, was du austauschen willst, vielleicht hilft diese Seite weiter: http://wiki.lazarus.freepascal.org/FPSp ... preadsheet

knight

moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

Re: uno_pascal_bridge

Beitrag von moritz »

Danke knight,
das Schreiben in in Calc- und Writer-Dateien wäre nur eine Notlösung.
Mein Vorhaben:
1. Erstellen einer Calc- Tabelle aus einer Vorlage und Eintrag von Daten aus einer Datenbank.
2. Bearbeitung dieser Tabelle in OO (Eintag von neuen Werten, Auswertung mit Starbasic- Makro
3. Einfügen einer neuen Datenreihe in die geöffnete Tabelle aus der Datenbank mit Lazarus-Programm
4. Übernahme von Daten aus der Calc-Tabelle in das Lazarus-Programm bzw. in die Datenbank.
Ursprünglich war das eine delphi- Lösung mit Excel. Ich habe das bereits für OO umgeschrieben, aber mit delphi und natürlich nur unter Windows.

Für Serienbriefe wird mit delphi eine Base- Datenbank angelegt und in OO angemeldet.

Außerdem lege ich mit der Adress- und Projektdatenbank noch Briefe an. Aus der Datenbank werden Felder im Writerdokument ausgefüllt. Die Briefe werden in eine Datenbank eingetragen.

Moritz

moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

Re: uno_pascal_bridge

Beitrag von moritz »

Nachfrage
Hat sich vielleicht doch jemand mal mit der uno_pascal_bridge befasst?
Unter WinXP konnte ich den Quelltext der svn- Version fehlerlos kompilieren. Beim Programmstart der Demo kommt allerdings die Fehlermeldung cppu3.dll nicht gefunden. Die dll ist aber da, sie ist im Suchpfad und auch registriert. WinXP ist aber nicht der Sinn der Sache.
Unter Opensuse11.3 64Bit musste ich die Pointer-Größe der svn-Version an 64bit anpassen (Integer zu PtrInt / Ordinal zu PtrUInt). Damit entfielen die Fehlermeldungen. Trotzdem bricht Lazarus bei der Kompilierung ab.
uno_pas_kernel/uno_pascal_helper_dll.pas(1,1) Fatal Compilation aborted.
Leider kann ich aus dieser Fehlermeldung nicht erkennen, wo der Fehler ist.
Hat jemand einen Tip dazu? Das Projekt uno_pascal_bridge scheint bei sourceforge.net eingeschlafen zu sein.
vielen Dank für eure Mühe
Moritz

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: uno_pascal_bridge

Beitrag von Euklid »

moritz hat geschrieben:Trotzdem bricht Lazarus bei der Kompilierung ab.
uno_pas_kernel/uno_pascal_helper_dll.pas(1,1) Fatal Compilation aborted.
Leider kann ich aus dieser Fehlermeldung nicht erkennen, wo der Fehler ist.
Hat jemand einen Tip dazu?


Haloo moritz,

kenne die uno_pascal_bridge nicht. Habe nur einen Tipp bzgl. der Fehlermeldung: Wenn man Lazarus von der Konsole aus startet, gibt es sämtliche Fehlermeldungen nocheinmal detaillierter über die Konsole aus. Vielleicht hilft das ja weiter?

Viele Grüße, Euklid

moritz
Beiträge: 16
Registriert: So 31. Dez 2006, 16:02
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Leipzig

Re: uno_pascal_bridge

Beitrag von moritz »

Danke für deinen Tip.
Das ist die Fehlermeldung auf der Konsole:
unhandled exception occurred at $0000000000417CD7 :
EOutOfMemory : Out of memory
$0000000000417CD7
$0000000000454EA6
$0000000000487813
$00000000004F5A9B
$00000000004EBA64
$00000000004EB949
$000000000055B90D
$000000000052D325
$000000000al_helper_dll
Fatal: Compilation aborted

Ich werde es wohl lassen müssen.
Moritz

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: uno_pascal_bridge

Beitrag von af0815 »

Einen Sinn das ganze zu portieren hat die Sache erst, wenn sie auf zumindest EINER Plattform mal läuft. Solange es nicht mal unter XP läuft, braucht man sich um den 64Bit Port sicher keine Sorgen zu machen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: uno_pascal_bridge

Beitrag von Euklid »

moritz hat geschrieben:Ich werde es wohl lassen müssen.


Noch lohnt es sich, nicht aufzugeben: Er zeigt nur deshalb nichts an, weil Du Die Degubber-Informationen aus der Datei entfernen lässt. Sie werden beibehalten, indem Du zwei Einstellungen vornimmst:
Im selben Menü "linker" muss aktiviert sein: "Debugger-Informationen..." und "Zeilennummern..."

Viele Grüße, Euklid

t-z
Beiträge: 49
Registriert: So 22. Nov 2009, 18:12
OS, Lazarus, FPC: Windows 7 Professional 64Bit / Kubuntu 10.04 (Lazarus 0.9.28.2 64 Bit FPC 2.2.4)
CPU-Target: Intel i5-760

Re: uno_pascal_bridge

Beitrag von t-z »

Hallo zusammen,

ich möchte mit ein Programm schreiben, dass unter anderem Open/LibreOffice Impress fernsteuert. Da ich z.B. auch den Bildschirm, auf dem die Präsentation angezeigt wird bestimmen möchte geht es nicht allein durch das Starten mit Komandozeilenparametern. Die Einbindung per Ole-Objekt wäre allerdings auch nicht zufriedenstellend, da sie nur unter Windows funktioniert. Zudem scheinen die Beispiele im Wiki nicht mehr zu funktionieren, da es com.sun.star.ServiceManager nicht mehr gibt (ungültige Klassenzeichenfolge). Daher habe ich mir mal die uno_pascal_bridge angesehen.

Auch ich bin auf den oben genannten Fehler gestoßen (musste zuvor noch Zeile 438 in uno_typelib_typedescription.pas auskommentieren, da external erwartet wurde). Ich konnte ihn auf folgende Weise lösen:

Code: Alles auswählen

Result:=Result+AlignSize(tmp_ppMemberTD^^.pType);
(^^)

In Zeile 136 (ebenfalls von uno_pascal_struct.pas) tritt ein ähnlicher Fehler auf. Er lässt sich so lösen:

Code: Alles auswählen

Assert( Assigned(pUNOStructureTD) and (pUNOStructureTD^.aBase.aBase.eTypeClass=typelib_TypeClass_STRUCT),
(^)

Nun wird das Programm mit den eingebundenen Units kompiliert. Allerdings beendet sich das Programm nun leider direkt nach dem Start automatisch. Das Projekt entspricht ansonsten der Standard-Vorlage für Anwendungen. Vielleicht hilft es dennoch jemandem weiter oder jemand kann mir bei meinem Problem helfen.

Antworten