Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#12

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