Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi PChar to String & zurück - Zeichen geht verloren (https://www.delphipraxis.net/101505-pchar-string-zurueck-zeichen-geht-verloren.html)

ThE_-_BliZZarD 14. Okt 2007 16:23


PChar to String & zurück - Zeichen geht verloren
 
Hallihallo liebe Delphigemeinde

ein kleines (aber nerviges) Problem mit PChar und Strings..

Ich habe eine Funktion in eine .dll ausgelagert, das einbinden und aufrufen und so weiter funkzioniert auch. Allerdings, da die Funktionen ja ohne die Borlandbiliotheken keine Strings als Parameter übergeben können, habe ich PChar's verwendet. Nun Übergebe ich der Funktion einen PChar in dem "2+3" steht. Das kommt auch an. In der Funktio habe ich dann eine Variable vom Typ Sring erstellt und mittels
Delphi-Quellcode:
String_var := Pchar_var;
Den PChar wieder in einen String verwandelt.
Nun habe ich testweise einfach den String wieder in einen PChar konvertiert via
Delphi-Quellcode:
result := PChar(String_var);
// Result ist natürlich vom Typ PChar..
und zurückgeben lassen.. Allerdings kommt jetzt im Mutterprogramm nur noch der String "2+" zurück, d.h. das letzte Zeichen ist verlorengegangen..

Gesamt besteht meine Funkion aus:
Delphi-Quellcode:
function aufreg(meinParameter: PChar): PChar;
var
   meinString: String;
begin
   meinString := meinParameter;
   result := PChar(meinString);
end;

//Aufgerufen mit -> PChar('2+3')
//Raus kommt    -> 2+
Wahrscheinlich ist das ein wirklich dämlicher Fehler.. aber er macht mich verrückt.. plz help!

MfG

BliZZarD

Zacherl 14. Okt 2007 16:24

Re: PChar to String & zurück - Zeichen geht verloren
 
Füg dem String mal ein #0 hinzu und übergib den Pointer darauf, also @Str[1].

Dax 14. Okt 2007 16:25

Re: PChar to String & zurück - Zeichen geht verloren
 
Das #0 am Ende des Strings ist immer da, soweit ich mich erinnern kann.

ThE_-_BliZZarD 14. Okt 2007 16:27

Re: PChar to String & zurück - Zeichen geht verloren
 
@Zacherl: Das hab ich jetzt nicht ganz kapiert.. Sry :-(

Würdest du mir ein kleines Codebeispiel spendieren?

mkinzler 14. Okt 2007 16:28

Re: PChar to String & zurück - Zeichen geht verloren
 
Wo wird den abgeschnitten? Kommt das richtige in der Dll an?

ThE_-_BliZZarD 14. Okt 2007 16:30

Re: PChar to String & zurück - Zeichen geht verloren
 
@mkinzler: ja in der dll kommts richtig an, wenn ich das hier mache:

Delphi-Quellcode:

function aufreg(meinParameter: PChar): PChar;
var
   meinString: String;
begin

   result := meinParameter;
end;
Dann kommt ds richtige raus.. also muss es an den zwei Type-casts liegen..

brechi 14. Okt 2007 16:32

Re: PChar to String & zurück - Zeichen geht verloren
 
Du gibts nen Pointer auf eine Lokale Variable zurück. Da ist es total zufällig was zurückgeliefert wird.

mkinzler 14. Okt 2007 16:32

Re: PChar to String & zurück - Zeichen geht verloren
 
Dann versuch mal:
Delphi-Quellcode:
result := PChar(meinString+#0);

DeddyH 14. Okt 2007 16:34

Re: PChar to String & zurück - Zeichen geht verloren
 
Und so?
Delphi-Quellcode:
function aufreg(meinParameter: PChar): PChar;
var
   meinString: String;
begin
   meinString := StrPas(meinParameter);
   result := PChar(meinString);
end;

brechi 14. Okt 2007 16:36

Re: PChar to String & zurück - Zeichen geht verloren
 
Nein versuchs so nicht. Funktionen geben keine PChars zurück. Nimm nen String oder packs als Parameter rein und lass die Aufrufende Funktion den Speicher allokieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz