Guten Abend,
ich habe mich heute mal mit DLLs beschäftigt und bin doch auf einige Probleme gestoßen. Einige konnt ich bis jetzt selber lösen, aber jetzt hab ich wieder ein Problem und dies mal find ich einfach keine Lösung.
Zur Thematik, ich besitze zwei Arrays aus zwei Recordtypen, die hier zu bewundern sind:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| type
TAnzahl = Record Strassen: Integer; Stadtteile: Integer; end;
TSwk = Record Name: String[100]; Strasse: String[100]; Stadtteil: String[30]; end;
TVw = Record Verbindung: String[100]; Stadtteile: Array[0..20] of String[30]; Strassen: Array[0..40] of String[65]; Anzahl: TAnzahl; end; |
Diese schreibe ich per File of Tvw oder Tswk in eine Datei und lese sie so auch wieder aus. Nun wollte ich die Routinen zum Speichern und Laden der Datensätze des Arrays allerdings in einer DLL auslagern. So weit so gut, die Schreibroutine funktioniert auch schon und sieht so aus:
Delphi-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:
| function Schreibe_Swk_Datei(Daten: Array of Tswk; Dateiname: ShortString): boolean; Register; var x: Integer; begin
if FileExists(Dateiname) then
try
AssignFile(Swk_Datei, Dateiname);
ReWrite(Swk_Datei);
for x:= 0 to length(Daten)-1 do Write(Swk_Datei, Daten[x]);
closefile(Swk_Datei);
result := true;
except
result := false; end; end; |
Allerdings funktioniert meine Leseroutine nicht:
Delphi-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: 26: 27: 28: 29:
| function Lese_Swk_Datei(var Daten: Array of Tswk; Dateiname: ShortString): boolean; Register; var x: Integer; begin
if FileExists(Dateiname) then
try
x := Length(Daten); AssignFile(Swk_Datei, Dateiname); ReSet(Swk_Datei);
while not eof(Swk_Datei) do begin
Read(Swk_Datei, Daten[x]); Inc(x); end;
closefile(Swk_Datei);
result := true;
except
result := false; end; end; |
Bei der auskommentierten Zeile // SetLength(Daten, length(Daten)+FileSize(Swk_Datei)); bekomme ich den Fehler, dass es unkompatible Typen sein, ich muss aber die Länge des Arrays vergrößern, da sonst keine Datensätze gelesen werden können ...
Wäre für jede Hilfe dankbar :)
Ps: Die Suchfunktion mit den Worten "Array DLL" hab ich schon benutzt und ergab kein wirklich sinnvolles Ergebnis für mich :/
Mfg ...
Ich war wohl etwas voreilig -> nach intensiver Suche hab ich
das hier gefunden :oops: