AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PChar schneidet letztes Zeichen ab

Ein Thema von TheMiller · begonnen am 6. Okt 2006 · letzter Beitrag vom 7. Okt 2006
Antwort Antwort
Muetze1
(Gast)

n/a Beiträge
 
#1

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 15:08
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:
  // 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;
/EDIT: Super - da tippt man die ganze Zeit und zwischenzeitlich wird das gleiche getippelt... Ich hasse umsonst arbeiten...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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