Compilermodes !Hilfe!

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Compilermodes !Hilfe!

Beitrag von Christian »

So, jetzt hab ich ma n schönes Problem.
hab da n stück tp code, der sich auch ohne weiteres vom fpc compilieren lässt und funktioniert im fpc mode oder tp compatibilitätsmodus allerdings nicht in objfpc mode :(

Ich will das aber in ne komponente packen also brauch ich den.
Das Problem ist denk ich hier zu suchen

Code: Alles auswählen

TPxHeader           =  packed RECORD
    recordSize              :  word;
    headerSize              :  word;
    fileType                :  byte;
    maxTableSize            :  byte;
    numRecords              :  longint;
    nextBlock               :  word;
    fileBlocks              :  word;
    firstBlock              :  word;
    lastBlock               :  word;
    unknown12x13            :  word;
    modifiedFlags1          :  byte;
    indexFieldNumber        :  byte;
    primaryIndexWorkspace   :  pointer;
    unknownPtr1A            :  pointer;
    unknown1Ex20            :  array[$001E..$0020] of byte;
    numFields               :  integer;
    primaryKeyFields        :  integer;
    encryption1             :  longint;
    sortOrder               :  byte;
    modifiedFlags2          :  byte;
    unknown2Bx2C            :  array[$002B..$002C] of byte;
    changeCount1            :  byte;
    changeCount2            :  byte;
    unknown2F               :  byte;
    tableNamePtrPtr         : ^pchar;
    fldInfoPtr              :  PFldInfoRec;
    writeProtected          :  byte;
    fileVersionID           :  byte;
    maxBlocks               :  word;
    unknown3C               :  byte;
    auxPasswords            :  byte;
    unknown3Ex3F            :  array[$003E..$003F] of byte;
    cryptInfoStartPtr       :  pointer;
    cryptInfoEndPtr         :  pointer;
    unknown48               :  byte;
    autoIncVal              :  longint;
    unknown4Dx4E            :  array[$004D..$004E] of byte;
    indexUpdateRequired     :  byte;
    unknown50x54            :  array[$0050..$0054] of byte;
    refIntegrity            :  byte;
    unknown56x57            :  array[$0056..$0057] of byte;
    case INTEGER of
      3:   (fieldInfo35     :  array[1..255] of TFldInfoRec);
      4:   (fileVerID2      :  integer;
            fileVerID3      :  integer;
            encryption2     :  longint;
            fileUpdateTime  :  longint;  { 4.0 only }
            hiFieldID       :  word;
            hiFieldIDinfo   :  word;
            sometimesNumFields:integer;
            dosCodePage     :  word;
            unknown6Cx6F    :  array[$006C..$006F] of byte;
            changeCount4    :  integer;
            unknown72x77    :  array[$0072..$0077] of byte;
            fieldInfo       :  array[1..255] of TFldInfoRec);


da sind etliche pointer drin und ich denke die sind im fpc mode 16 bit und im objfpc mode 32 bit
nun ist die frage wie sag ich dem compiler das er für diese unit 16 bit pointer gebrauchen soll oder bin ich da ganz aufm holzweg ?

Die Zielkomponente hört übrigends auf den namen TParadoxDataSet ;)
Dürfte also sicherlich auch für einige von euch interessant sein :)
Wird zwar nur lesen können aber das reicht ja in den meissten fällen auch...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

ok, die pointer sinds net sind in beiden fällen 4 byte
$PACKRECORDS hab ich mit allen werten durchprobiert was solln das sein ?!
in $mode objfpc ist der record 642 byte lang
und in $mode fpc 630 byte
ich werd noch irre
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

man glaubt es kaum, es sind die integer die sind im mode fpc 4 byte und im mode objfpc 6 bytes lang zumindest in packed arrays
laut doku kann integer aber nur 4 oder 8 byte lang sein
longint ist teoretisch 4 aber praktisch auch 6 das muss mit dem align zu tun haben
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

ok, ich habs hab im eifer des gefechtes 4 und 2 byte verwechselt shortint ist definiert 2 byte lang und schon gehts :)
unter linux paradox files lesen, schon n bissle ungewohnt :)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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:

Beitrag von Euklid »

Beantwortest dir wohl immer deine eigenen Fragen selbst, was? :P

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Hmpf, ja ja
hätt ja sein können das theo da schneller is aber wer suchet, der findet wie immer :( wiso kann nich ma jemand meine fehler suchen :p
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:Hmpf, ja ja
hätt ja sein können das theo da schneller is aber wer suchet, der findet wie immer :( wiso kann nich ma jemand meine fehler suchen :p


Sorry, war in einer Sitzung. ;-)
Aber ja, aufpassen ist schon angesagt. Hab ich auch feststellen müssen, als ich die Bildformat-Leseroutinen von Delphi übernommen habe.

Ein ganz fieser:

var Frame:Smallint;

Swap(Frame) <-Delphi swappt Smallint als Word
Swap(Word(Frame)); <- Für FPC Typecasten sonst gibt's ein anderes Resultat.

...und so ne Sachen. Ziemlich Sch... zum Debuggen ;-)

Zur allgemeinen Erheiterung: Hier mal ein Screenshot: Lazarus lädt nativ ein Kodak Photo CD Bild (Übersetzung der GraphicEx von Mike Lischke)
Dateianhänge
Lazarus lädt Kodak Photo CD
Lazarus lädt Kodak Photo CD

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Naja ich denke morgen wird Lazarus nativ mit Paradox umgehen können (zumindest lesend) :)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

... ;)
*grins*
Dateianhänge
paradox.PNG
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Hübsch!

Antworten