| Autor |
Beitrag |
UWER
      
Beiträge: 79
SUSE 8.1, XP Home
D7 Prof. , Kylix 3
|
Verfasst: Fr 13.06.03 10:27
Hallo Leute,
ich habe früher unter D3 eine DLL aufrufen müssen und ich übergebe ihr einen Zeiger auf eine Struktur vom Typ TDRE:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| THeadCUCMMts = record nRespNo : LongInt; acRespNoTimestamp : array [0..CHAR_DATE_TIME] of char; acRespType : array[0..2] of char; end;
TDRE = record CucmMts : THeadCucmMts; acSrcAddr : array[0..14] of char; acTimeStamp : array[0..CHAR_DATE_TIME] of char; nOrgNo : LongInt; nCustomerNo : LongInt; acCustomerExtension : array[0..0] of char; nCarType : WORD; nCarID : WORD; acGPSTimeStamp : array[0..CHAR_DATE_TIME] of char; rGPSLatitude : Double; acGPSLatitudeHemisphere : array[0..0] of char; rGPSLongitude : Double; acGPSLongitudeHemisphere : array[0..0] of char; nGPSQuality : WORD; nGPSSatInUse : WORD; nGPSDistance : LongInt; end; |
Unter D3 alles no problem. Jetzt soll ich ein Update erstellen, habe aber D5 im Einsatz. Das geht solange gut bis die erste Double-Variable kommt. Von da ab kriegt die DLL nur noch Müll. Kann mir jemand sagen ob sich da irgendwas geändert hat. Ich habe auch keinen Einfluß auf die DLL, die ist Fix.
_________________ Gruß
UWER
|
|
UWER 
      
Beiträge: 79
SUSE 8.1, XP Home
D7 Prof. , Kylix 3
|
Verfasst: Mo 16.06.03 09:20
Hallo Leute,
Ich habe am Wochenende noch mal D3 installiert und habe etwas rumgespielt. Dabei habe ich rausgefunden das D3 für einen Double 8 Byte reserviert und D5 stattdessen 10 Byte. Fällt irgendjemand dazu eine Lösung ein oder hat irgendeine ID?
_________________ Gruß
UWER
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mo 16.06.03 09:58
Hallo,
wie kommst du drauf, das der D5 Double 10 Byte hat?
Der sollte 8 Byte haben, der 10 Byte Typ ist Extendet.
Gruß
Klabautermann
|
|
UWER 
      
Beiträge: 79
SUSE 8.1, XP Home
D7 Prof. , Kylix 3
|
Verfasst: Mo 16.06.03 10:11
Hallo Klabautermann,
genau das hatte ich eigentlich auch gedacht.
Rausgefunden habe ich das indem ich unter D3 und D5 jeweils die Strukturlängen mit SizeOf ermittelt und mir einfach ausgegeben habe.
Wenn ich einen packed record verwende habe ich auch in D5 die 8 Byte. Ohne packed jedoch 10.
Sch... Spiel.
_________________ Gruß
UWER
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mo 16.06.03 11:02
Hallo,
| UWER hat folgendes geschrieben: | | Wenn ich einen packed record verwende habe ich auch in D5 die 8 Byte. Ohne packed jedoch 10. |
ah, stimmt, das macht Sinn. Die Blockgröße ist schuld. Spricht etwas dagegen einen packed Record zu verwenden? Unter D7 könntest du das auch noch Objektglobal einstellen, aber unter D5 geht das meines wissens nicht.
Gruß
Klabautermann
|
|
UWER 
      
Beiträge: 79
SUSE 8.1, XP Home
D7 Prof. , Kylix 3
|
Verfasst: Mo 16.06.03 11:17
Hallo Klabautermann,
das Problem ist das sich dann auch noch die DLL ändern müßte. Die ist jedoch nicht auf meinem Mist gewachsen. Es besteht zwar die Möglichkeit einer Änderung, aber einfach wird das nicht da Ersteller verschwunden und der Nachfolger nicht viel mehr als den SourceCode in C hat.
Ich denke mir wird wohl nichts anderes übrig bleiben.
_________________ Gruß
UWER
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mo 16.06.03 14:49
Hallo,
| UWER hat folgendes geschrieben: | | das Problem ist das sich dann auch noch die DLL ändern müßte. |
nicht, wenn das C-Struct eine Optimale größe hat. Dann müsste es ja mit dem Paced-Record übereinstimmen oder übersehe ich da etwas?
Gruß
Klabautermann
|
|
UWER 
      
Beiträge: 79
SUSE 8.1, XP Home
D7 Prof. , Kylix 3
|
Verfasst: Mo 16.06.03 15:17
Hallo,
| Klabautermann hat folgendes geschrieben: | | wenn das C-Struct eine Optimale größe hat |
Das ist genau das Problem, ich habe einfach mal mit einem packed record gearbeitet und es kam nur noch Müll.
_________________ Gruß
UWER
|
|