![]() |
Re: PChar schneidet letztes Zeichen ab
Zitat:
|
Re: PChar schneidet letztes Zeichen ab
Du konvertierst den String temporär zu einem PChar und gibst ihn per Result zurück. Problem dabei ist, dass die Typkonvertierung nur temporär ist und nach verlassen der Funktion ist der Speicher wo der PChar angelegt wurde ungültig. Daher ist es kein Wunder, dass die Daten nicht mehr stimmen. Es ist eher erstaunlich das der PChar soweit noch lesbare Zeichen enthält.
Ich empfehle dir eine andere Art der Stringübergabe: Besorg dir Speicher für den PChar im Hauptprogramm und übergebe diesen samt der Angabe der Länge an die DLL Funktion, welche den Buffer befüllt, wenn er genügend Platz bietet. Beispiel dazu:
Delphi-Quellcode:
/EDIT: Super - da tippt man die ganze Zeit und zwischenzeitlich wird das gleiche getippelt... Ich hasse umsonst arbeiten...
// Hauptprogramm:
Procedure xy; Var lString: String; Begin SetLength(lString, 2048); SetLength(lString, DeineDLLFunc(PChar(lString), 2048)); ShowMessage(lString); End; // DLL Function DeineDLLFunc(ABuffer: PChar; Const ABufferLen: Integer): Integer; Var lStr: String; Begin Result := 0; lStr := Reg.ReadString('whatever'); If ( ABufferLen > Length(lStr) ) Then // > weil wegen #0 ! Begin StrPCopy(ABuffer, lStr); Result := Length(lStr); End; End; |
Re: PChar schneidet letztes Zeichen ab
Hm,
wie soll ich ihn den sonst zurückgeben als per result. @Luckie: Den Wert habe ich per Hand angelegt. Neuer Schlüssel -> REG-SZ und dann den Pfad eingetragen, aber KEIN abschließendes Leerzeichen. Muss ja auch nicht, oder? |
Re: PChar schneidet letztes Zeichen ab
Zitat:
|
Re: PChar schneidet letztes Zeichen ab
Siehe mein Edit. Ist auch die Lösung zur Anmerkung von Muetze1.
|
Re: PChar schneidet letztes Zeichen ab
Hm...
Aber bei ALLEN anderen Werten und sonstigen Strings funktioniert es und hat immer funktioniert... Deine Methode mag richtig und professionell sein - das kann ich jetzt nicht beurteilen - aber das sieht mir nach mehr Aufwand aus, als durch eine DLL gespart werden sollte... ACHSO: Und Muetze1, umsonst war es nicht. Ist auch sehr gut erklärt. Ich denke, ich teste das mal... |
Re: PChar schneidet letztes Zeichen ab
Bei deinem Glück solltest du in Erwägung ziehen Lotto zu spielen. Würde sich eventuell lohnen. ;)
Tatsache ist eben, wie schon gesagt wurde, dass es eher verwunderlich ist, dass du überhaupt etwas zurückbekommst. Ob es den Aufwand nun trechtfertigt oder nicht, musst du entscheiden. |
Re: PChar schneidet letztes Zeichen ab
Zitat:
/EDIT: Ok, wieder umsonst. Roter Kasten im Urlaub? |
Re: PChar schneidet letztes Zeichen ab
Ja das macht es allemahl. Mit dem Lotto kann ich mir auch nochmal überlegen. Können ja, wie der Raab eine Tippgemeinschaft für die 29 Millionen aufmachen!
Ok, ich werde das mit dem Buffer so machen. Ist es auch ok, dass ich einen Buffer von 2048 für meinen String reserviere - oder ist das zu viel? |
Re: PChar schneidet letztes Zeichen ab
Bau die Funktion so um, dass sie dir sagt, wie viel Speicher sie braucht. Ist, meiner Merinung nach, die sauberste Lösung.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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 by Thomas Breitkreuz