![]() |
PChar Problem
Hi,
ich habe mal wieder ein Problem mit Pointern :wall: In eine Funktion werden mehrere string Parameter übergeben, wovon einer dann zu einem PChar umgewandelt werden muss. Die Funktion sieht in etwa so aus:
Delphi-Quellcode:
Das ganze spielt sich in einer DLL ab, diese Funktion wird jedoch nur intern verwendet. Nun ist mein Problem, dass die Länge immer 0 ist (obwohl sie in Wahrheit 49 oder so ist), wenn s Binary-Material enthält, welches am Anfang 5x #0 hat. Liegt das daran, dass die mit #0 abgeschlossen werden?
function Test(const proc: Pointer; const a, b, c, s: string): einRecord;
var PS: PChar; begin if s <> '' then PS := PChar(s) else PS := nil; Showmessage(IntToStr(Length(PS))); end; [edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit] |
Re: PChar Problem
Bei mir funktionierts... bei mir ist String aber auch noch ein AnsiString und bei Dir Unicode.
Vielleicht ist es OK, in der Funktion AnsiString statt String zu verwenden? |
Re: PChar Problem
Zitat:
Zitat:
|
Re: PChar Problem
Ok, dann vergiss meinen Vorschlag. Ich hatte dem letzten Satz zu wenig Beachtung geschenkt :cry:
|
Re: PChar Problem
#0#0 ist das Ende eines Strings
|
Re: PChar Problem
Hm, ok. Kann man das denn irgendwie ohne hässliche Workarounds (z.B. "n#0" dahin zu schreiben und es dann im Hauptprogramm ersetzen zu lassen) lösen? Ich kann leider keinen anderen Typen benutzen, weil der PChar dann einer Methode, die nach außen geht, übergeben wird, und ein ShortString wäre zu kurz. :x
|
Re: PChar Problem
Array of Byte?
|
Re: PChar Problem
Hm, ok, dann muss ich das System etwas umstellen, was aber kein Problem sein sollte. Ist in Delphi zufällig eine Methode integriert mit der ich einen string in ein AOB umwandeln kann oder muss ich mir das selber schreiben?
|
Re: PChar Problem
Wie wärs damit?
Delphi-Quellcode:
Dürfte eigentlich alles einwandfrei funktionieren. Wenn du Array of Bytes verwendest musst du beim Funktionsaufruf erst zu TDynByteArray casten.
type
TDynByteArr = Array of Byte; function TryByteArrayToString(const bArr: TDynByteArr; var Str: String): Boolean; var i : Integer; begin Result := (sizeof(bArr) <> 0) or false; if Result then begin SetLength(Str, High(bArr)+2); for i := 0 to High(bArr) do try Str[i+1] := chr(bArr[i]); except Result := false; end; end; end; function TryStringToByteArray(const Str: String; var bArr: TDynByteArr): Boolean; var i : Integer; begin Result := (Str <> '') or false; if Result then begin SetLength(bArr, sizeof(Str)); for i := 1 to sizeof(Str) do try bArr[i-1] := ord(Str[i]); except Result := false; end; end; end; |
Re: PChar Problem
Okay, danke für deine Hilfe!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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