Entwickler-Ecke
Sonstiges (Delphi) - Integer zu einem String
zero - Sa 03.08.02 00:35
Titel: Integer zu einem String
Hi mal ne frage
und zwar will/muss ich einen Integer zu einem String bzw PChar convertieren, unter C++ kein problem aber in delphi habe ich damit schwierigkeiten, hoffe ihr könnt mir helfen, also hier mal etwas source:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var a,c:pchar; b:integer; begin a:='hallo'; b:=integer(@a); // so und nun sollte c=b convertiert werden nur wie ? end; |
in cpp währe das ja so
Quelltext
1: 2:
| int a=(int)path.c_str(); char *b=(char*)a; |
benötige das da die programme mit Post und GetMessage untereinander komunizieren und das das ja nur zahlen sind (wParam & lParam) kann ich ja kein char verschiken.
vielen dank schonmal im vorraus.
mfg
Daniel.
Black Lightning - Sa 03.08.02 01:03
Quelltext
1:
| IntToStr(Integer); string |
zero - Sa 03.08.02 01:14
nein nun wirklich nicht, die funktion liefer den wert nur als string zurück aber der soll aus dem integer einen string MACHEN in dem wert steckt ja text drin... hast du nicht so ganz verstanden :wink:
GPF - Sa 03.08.02 02:02
Achso - wäre einfacher, wenn Du auch schreiben würdest was Du genau haben möchtest. Wenn ich Dich also richtig verstehe brauchst Du also die Speicheradresse, an dem der String beginnt, damit Du diese dann als Zeiger übergeben kannst.
In Delphi kannst Du dazu ebenfalls den @-Operator verwenden.
Hier eine kurze Beispielprozedur:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure Test; var p:Integer; s:string; begin s:='TEST'; p:=Integer(s); caption:=String(p); end; |
Es hängt natürlich davon ab wie Du Deine Routine genau implementierst. Im oben genannten Beispiel wird der String s am Ende der Prozedur Test wieder freigegeben. Hast Du nun den Zeiger der Speicheradresse zu s an ein anderes Programm weitergeleitet, so zeigt dieser an die ehemalige Speicheradresse, die aber nicht mehr gültig ist.
In diesem Fall dürfte das angesprochene PostMessage allerdings nicht funktionieren, da Postmessage die Nachricht an die Messagequeue sendet und ohne auf Antwort die Bearbeitung der aktuellen Routine fortsetzt.
Du mußt also SendMessage benutzen. Hier wartet Windows bis ein Programm entsprechend der Implementierung die Bearbeitung der Nachricht quittiert hat.
zero - Sa 03.08.02 02:59
Okay soweit war ich dann auch schon...
Hmm stimmt der zeiger ist ja nur auf das programm bezogen verfügbar... das hatte ich noch garnicht überdacht :?
das erklärt auch den access violation error im anderem programm... MIST :(
aber mit SendMessage macht er garnichts, da bekommt er nichtmal eine msg !?
der code für die abfrage ist:
im Form OnCreate ist einfach: Application.OnMessage:=GetInfoMessages;
Programm 2:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.GetInfoMessages(var Msg: TMsg; var Handled: Boolean); begin if Msg.message=WM_USER+231 then begin ShowMessage('Path: '+String(Msg.wParam)); end; end; |
das programm verschickt die antworten so:
Programm 1:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| void __fastcall TForm1::ApplicationReceiveMessage(tagMSG &Msg, bool &Handled) { switch (Msg.message) { case WM_USER+200: { PostMessage((HWND)Msg.wParam,WM_USER+231,(int)path.c_str(),0); break; } } } |
und hier nochmal der request:
Programm 2:
Quelltext
1:
| PostMessage(FindWindow(nil,'unwichtig'),WM_USER+200,Form1.Handle,0); |
hoffe das reicht um zu verstehen was ich machen will :wink:
danke :)
Klabautermann - Sa 03.08.02 13:03
Titel: Re: Integer zu einem String
zero hat folgendes geschrieben: |
benötige das da die programme mit Post und GetMessage untereinander komunizieren und das das ja nur zahlen sind (wParam & lParam) kann ich ja kein char verschiken. |
Wenn es wirklich um
einen Char (1 Byte) dann kannst du die Funktion
ORD(Char) verwenden.
Wenn du hingegen einen LongInt (32 Bit) verschicken willst, musst du wie in C++ Mit Zeigern Typcasten. Das könnte so aussehen:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| function CharsToInt(Chars : ARRAY OF CHAR) : LongInt; VAR pInt : ^Longint; begin pInt := @Chars; Result := pInt^; end; |
Das ist jetzt ungetested sollte aber so klappen. Du musst beachten, das exakt die ersten 4 Zeichen des übergebenen Array OF Char interpretiert werden. Du musst also vor dem Aufruf bereichsprüfungen durchführen.
Gruß
Klabautermann
zero - Sa 03.08.02 14:37
ich mach wohl besser man nen neuen thread, habe so das gefühl das passt hier nichtmehr rein...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!