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;
/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;
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