![]() |
Stringreplace - Zugriffsverletzung
Hallo Leute, ich verstehe die welt nicht mehr, folgendes Problem habe ich:
Ich habe hier zwei Funktionen in einer DLL, die mir das übergebene Datum in Tag, Monat, Jahr aufspalten. Die Funktion getMonat funktioniert auch. Aber bei der Funktion getJahr, sobald ich stringgreplace aufrufe und den Wert zurückgebe bekomme ich eine Zugriffsverletzung und ich weiß beim Teufel nicht warum. Was mache ich in der Funktion falsch?
Delphi-Quellcode:
Bitte um Hilfe danke
function getMonat(date: TDate): string;stdcall;
var datum: pchar; zw,zw1,zw2,zw3: pchar; z,z1,z2,z3: string; monat: string; begin datum := pchar(datetostr(date)); zw := strpos(datum,'.'); z := stringreplace(zw,'.','',[]); zw2 := strpos(pchar(z),'.'); z1 := stringreplace(z,zw2,'',[]); result := z1; end; function getJahr(tagmonat: string): string;stdcall; var datum: string; date: TDate; z: string; begin // datum := pchar(datetostr(date)); datum := datetostr(date); z := stringreplace('KAKAKAK','sdfsadfsdf','assaas',[]); result := z; end; |
Re: Stringreplace - Zugriffsverletzung
Warum verwendest du nicht DecodeDate?
Zitat:
|
Re: Stringreplace - Zugriffsverletzung
Tja gute Frage war mir bis dato nicht bekannt. Aber zum meinem Problem was mache ich falsch????
Das war jetzt nur ein Beispiel, aber das Beispiel funktioniert ja auch nicht, es ist mir klar das hier nichts rauskommt. Aber warum bekomme ich eine Zugriffsverletzug ???? Was mache ich falsch??? |
Re: Stringreplace - Zugriffsverletzung
also ich habe deine funktion getJahr ohne probleme ausführen können.
post doch mal dein komplettes programm bzw hänge es an. und ich schließe mich dem tip von mkinzler mit dem decodeDate an. denn wozu eine dll verwenden wenn es doch von haus aus schon funktionen gibt die dir das gewünschte resultat liefern. |
Re: Stringreplace - Zugriffsverletzung
ich hätte am ehesten hier den Fehler vermutet:
Delphi-Quellcode:
da du dir nur einen Pointer auf das result von "DateToStr" holst kann ich mir vorstellen das der Compiler den Rückgabewert bei zeiten wieder aufräumt und ein Pointer somit ins nirvana zeigt.
datum := pchar(datetostr(date));
aber ich versteh eh nicht warum du ständig auf pchar castest anstelle die entsprechenden Stringfunktionen zu verwenden. |
Re: Stringreplace - Zugriffsverletzung
Moin Gordon,
hast Du auch daran gedacht die Unit ShareMem mit einzubinden? Ansonsten kannst Du keine Daten vom Typ String für die Übergabe zwischen EXE und DLL verwenden. Das wird im Kommentar beschrieben, wenn man den DLL-Wizard benutzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz