Autor Beitrag
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Fr 14.02.03 18:27 
Hi,
wie kann ich einen Pointer in einen String umwandeln?
Folgendes klappt nicht:
ausblenden Quelltext
1:
2:
3:
4:
function PointerToStr(data:Pointer);
begin
 Result:=StrPas(data);
end;


maxk

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 14.02.03 18:31 
Hallo,

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

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

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Fr 14.02.03 18:42 
Das klappt nicht wirklich! Delphi steigt mit Zugriffsverletzungen aus! :(

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 14.02.03 18:53 
Hallo,

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

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
DaFox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189



BeitragVerfasst: Fr 14.02.03 19: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?

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


Fragen über Fragen! :wink:

Gruß,
Markus
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: So 16.02.03 18:37 
@DaFox: Jetzt hast du mich ganz verwirrt! :lol:

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

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
HeLe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 02.03.03 11: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: So 02.03.03 13: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:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
HeLe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 02.03.03 17: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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: So 02.03.03 19: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:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.