AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

wert eines Pointers ermitteln

Ein Thema von Marco Steinebach · begonnen am 18. Jul 2008 · letzter Beitrag vom 19. Jul 2008
Antwort Antwort
Marco Steinebach

Registriert seit: 4. Aug 2006
502 Beiträge
 
Delphi 5 Enterprise
 
#1

wert eines Pointers ermitteln

  Alt 18. Jul 2008, 19:19
Hallo,
ähm, ich schähm mich ja schon fast, , aber jetz hab ich alles durcheinander gebracht:
meine Klasse hat ein Fensterhandle. Dieses muß einer Prozedur übergeben werden, die als, tja, freien Parameter, einen vom typ Pointer hat.
Die Prozedur gehört aber nicht zu meiner Klasse (übrigens auch nur deshalb, weil der Compiler jammert, daß ein Methodenzeiger kein realer Prozeduraufruf ist, hat er ja recht).
also:
procedure EndOfStream (user: Pointer); stdcall; Wie kriege ich mein Fensterhandle nu in die Procedur rein, und, wie kriege ich es innerhalb der Prozedur wieder raus?
also, mal angenommen, mein fensterhadle heißt h:
[delphi]
EndOfStream (h);
{/delphi]
geht logischerweise nicht, weil pointer und HWND nicht das gleich sind.
Ich steh völlig auf dem Schlauch - umschreiben der Prozedur geht nicht, weil's eine vorgegebene CallBack-Routine ist.
Ähm, kann mir mal jemand beim aufrollen helfen?
Vielen Dank schonmal und viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: wert eines Pointers ermitteln

  Alt 18. Jul 2008, 19:26
Bist du sicher, das die Prozedur ein Handle erwartet?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

Re: wert eines Pointers ermitteln

  Alt 18. Jul 2008, 19:30
Ein Cast sollte zumindest den Compiler zufrieden stellen.EndOfStream(Pointer(self.Handle)); Aber ob das so richtig ist, wage ich auch zu bezweifeln. Wenn ein Handle erwartet würde, wäre der Parameter bestimmt vom Typ HWND
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#4

Re: wert eines Pointers ermitteln

  Alt 18. Jul 2008, 21:37
HI,

wenns ne eigene Prozedur ist, dann kannst du auch den Typ ändern um das ganze einfacher zu machen. Falls nicht, würde ich vorschlagen einen typisierten Pointer zu nehmen. Den Wert bekommst du (nur beim typisierten) mit Pointer^.

Beispiel
Delphi-Quellcode:
procedure Test(Wert: Pointer);
begin
showmessage(IntToStr(Integer(Wert)) + '; ' + IntToStr(PCardinal(Wert)^));
end;

procedure TForm1.Button1Click(Sender: TObject);
var x1: HWND;
    x2: PCardinal;
begin
  x1 := self.Handle;
  x2 := @x1;
  Test(x2);
end;
Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: wert eines Pointers ermitteln

  Alt 18. Jul 2008, 21:42
Das ist doch viel zu kompliziert. SizeOf(Pointer) = SizeOf(HWND), also kann man einfach casten: EndOfStream(Pointer(Handle)) und in der Routine dann HWND(User).
Bernhards Lösung geht natürlich auch, allerdings funktioniert das nicht, falls der Wert nach dem Aufruf noch gebraucht wird - bei CreateThread ist das zum Beispiel so.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#6

Re: wert eines Pointers ermitteln

  Alt 18. Jul 2008, 21:49
war halt etwas schnell dahingeschrieben. Mit Pointern hab ich mich noch nicht eindringlich beschäftigt. Aber mit siizeof(Pointer) = sizeof(HWND) hast du recht, da das beides 32Bit-Integer sind.
Kann man einen Pointer mit new() langlebiger machen?

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: wert eines Pointers ermitteln

  Alt 18. Jul 2008, 21:51
Ja, aber das wäre hier nicht ratsam. Speicherallozierung ist aufwendig und hat bei Anwendungen mit mehreren Threads noch weitere Implikationen, da Locks verwendet werden müssen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
502 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: wert eines Pointers ermitteln

  Alt 19. Jul 2008, 09:51
Hallo zusammen,
herzlichen Dank für die vielen, raschen und absolut sinnigen Antworten.
Nein, die Prozedur (übrigens aus der bass.dll) erwartet kein Handle, sondern einen Parameter, mit dem der User machen kann, was er will. Bei mir ist's ein Handle, weil ich in dieser SyncProzedur eine Message schicken muß, und das handle brauche, wohin sie soll. Aber am typ ändern kann man nix.
Die Cast-Lösung (pointer(handle)) und wieder zurück funktioniert einwandfrei. Ich hatte mic daß nur nicht getraut, weil pointer immer sowas von (du schreibst gerade im Hauptspeicher rum) haben.
Vielen Dank nochmal und viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
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