Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Pointer -> String


maxk - Fr 14.02.03 19:27
Titel: Pointer -> String
Hi,
wie kann ich einen Pointer in einen String umwandeln?
Folgendes klappt nicht:

Quelltext
1:
2:
3:
4:
function PointerToStr(data:Pointer);
begin
 Result:=StrPas(data);
end;


maxk


smiegel - Fr 14.02.03 19:31

Hallo,

Du musst den Pointer in einen PChar überführen:


Quelltext
1:
2:
3:
  ...
  Result:=StrPas(PChar(data));
  ...


maxk - Fr 14.02.03 19:42

Das klappt nicht wirklich! Delphi steigt mit Zugriffsverletzungen aus! :(


smiegel - Fr 14.02.03 19:53

Hallo,

wäre nett, wenn Du die Fehlermeldung 'mal genauer spezifierst.
Wie wird die Funktion aufgerufen?


DaFox - Fr 14.02.03 20:30

Hi.

- Wieso hat Deine Funktion kein Ergebnistyp?
- Auf was zeigt denn der Pointer? Das mit dem StrPas funktioniert bei PChars, aber nicht bei allen Pointern (logischerweise)

Willst Du die Adresse des Pointers haben?


Quelltext
1:
2:
3:
4:
function PointerToStr(data: Pointer): String;
begin
  Result := IntToHex(Integer(data),8);
end;


Fragen über Fragen! :wink:

Gruß,
Markus


maxk - So 16.02.03 19:37

@DaFox: Jetzt hast du mich ganz verwirrt! :lol:

@schmiegel:Das kann ich dir auch net sagen:
Zugriffsverletzung an Adresse 0 :!:


HeLe - So 02.03.03 12:57

ich will jetzt nicht oberlehrerhaft wirken, aber ich bin mir eigentlich zu 99,9% sicher, daß du überhaupt keine zeiger benötigst - und erst recht keine untypisierten!

weißt du was ein referenzparameter (parameter, vor denen var steht) ist?


maxk - So 02.03.03 14:24

Das Problem ist nur, dass mir Windows nach einer WinAPI-Funktion nur Pointer zulässt. Da habe ich keine großen Wahl-Möglichkeiten. :cry:


HeLe - So 02.03.03 18:09

maxk hat folgendes geschrieben:
Das Problem ist nur, dass mir Windows nach einer WinAPI-Funktion nur Pointer zulässt. Da habe ich keine großen Wahl-Möglichkeiten. :cry:

Dann nimmst du trotzdem ganz normale Strings und castest die beim Aufruf der API-Funktionen in den Datentyp pchar. Der ist definiert als ^char, entspricht also exakt einem String unter C (char*). Bsp:

Quelltext
1:
2:
3:
4:
5:
6:
7:
var s: string;
    pc: pchar;
begin
   s:='test';
   pc:=pchar(s);
   irgendneAPIfunktion( pchar(s) );
   {...}

Und ich sag's noch einmal: untypisierte Zeiger (Datentyp pointer) sind absolut pfui, schmutzig, bah, damit spielt man nicht :evil:
wirklich nötig sind die nur
a) für absolute Low-Level-Programmierung oder wenn man
b) total unleserliche, wild mit Fehlern um sich schmeißende Programme haben möchte


maxk - So 02.03.03 20:57

Zitat:
Und ich sag's noch einmal: untypisierte Zeiger (Datentyp pointer) sind absolut pfui, schmutzig, bah, damit spielt man nicht
wirklich nötig sind die nur
a) für absolute Low-Level-Programmierung oder wenn man
b) total unleserliche, wild mit Fehlern um sich schmeißende Programme haben möchte


lezteres hört sich gut an :mrgreen: