Was ist ein handle in der Software
-
b schrieb:
im Prinzip
Zeiger != Handle
auch nicht im nicht Nicht-Prinzip
-
Pellaeon schrieb:
b schrieb:
im Prinzip
Zeiger != Handle
auch nicht im nicht Nicht-Prinzip
doch
-
b schrieb:
Pellaeon schrieb:
b schrieb:
im Prinzip
Zeiger != Handle
auch nicht im nicht Nicht-Prinzip
doch
NEIN das ist falsch, erzähl net so ein Stuss im Forum. Ein Zeiger zeigt auf etwas, ne ID und damit ein Handle zeigt NICHT auf etwas, also ist es auch im Prinzip kein Zeiger o_O
-
Äh, ein Handle zeigt im Grund doch auch nur auf eine Resource. Ein Zeiger enthält im Grunde auch nur eine Zahl, die auf eine Resource verweist. Ich seh nun dein Problem nicht, warum ein Zeiger kein Handle sein sollte.
-
@Pellaeon:
Du liegst falsch! Das hört sich ganz nach Halbwissen an, was du verbreitest. Ein Hanle ist ein abstrakter Begriff. Daher kann ein Handle durchaus auch ein Zeiger sein.
Kleiner Tipp: falls du dich mit WinAPI und/oder mit der MFC auskennst, kannst du ja einfach mal im Debugger schauen was für einen Wert ein HTREEITEM (Handle auf ein Treecontrol-Item) hat.
-
Ich habe mir mal die MFC Sourcen genauer angeschaut. Ich kann in diesen Bibliotheken keine in sich geschlossene Vorgehensweise erkennen. Es schaut alles irgendwie herumgedoktert aus. Über .NET kann ich nicht mitreden.
Sicherlich kann man einen Zeiger zurückgeben um gewisse Informationen zu bekommen. Die Diskussion hier in diesem Thread beweißt mir eigentlich, dass es doch keine einheitliche Vereinbarung existiert.Handle == Zeiger oder ID Nummer??
Außerdem sehe ich einen Unterschied zwischen Embedded World und Windows World.
Leider kann ich über die Linux Welt nichts sagen. Vielleicht gibt es Linux World Forumteilnehmer, die sich dazu äußern könnten.
-
Man soll gar nicht wissen was hinter einem Handle steckt.
-
handle schrieb:
Man soll gar nicht wissen was hinter einem Handle steckt.
Sogar noch ganz anders: Man will es einfach gar nicht.
(btw. ein Handle muss auch keine Zahl sein)
-
@krasstala:
Du machst dir zuviele Gedanken um Handles. Das Wort Handle ist einfach nur ein abstrakter Begriff. Was genau dahinter steckt ist nicht wichtig und soll auch nicht wichtig sein. Ein Handle ist nichts, was fest in der Programmiersprache eingebaut ist und erst recht kein Standard. Im Prinzip wurde das so ähnlich dir jetzt schon ein paar mal gesagt.Was Handles genau sind kann von API zu API oder Bibliothek zu Bibliothek anders sein. Sogar innerhalb einer bestimmten API können sie anders implementiert sein (siehe WinAPI). Meistens taucht das Wort Handle in Sprachen auf, die keine direkten Sprachmittel zur objektorientierten Programmierung bieten. Beispielsweise C oder Pascal. Böse gesagt ist das dann OOP für Arme.
Hier mal ein Beispiel in Pseudocode:
FensterHandle mein_fenster = fenster_erstellen(10, 10, 200, 200, "Test-Fenster"); fenster_zeigen(mein_fenster); fenster_setze_titel(mein_fenster, "Ein anderer Titel"); fenster_schliessen(mein_fenster);
Würde man das in einer Sprache mit OOP-Sprachmitteln machen, wäre mein_fenster eine Instanz von Fenster:
Fenster mein_fenster(10, 10, 200, 200, "Test-Fenster"); mein_fenster.zeigen(); mein_fenster.setze_titel("Ein anderer Titel"); mein_fenster.schliessen();
krasstala schrieb:
Leider kann ich über die Linux Welt nichts sagen. Vielleicht gibt es Linux World Forumteilnehmer, die sich dazu äußern könnten.
Unter Linux ist das auch nicht anders. Es gibt Bibliothek in denen der Begriff Handle auftaucht, um das zu erreichen was ich dir gerade erklärt habe.
-
Ein Handle is ein bitwise kopierbares, meist der Größe eines Maschinenwortes entsprechendes Objekt das zur Referenzierung anderer meist nicht trivialer Objekte dient. So sind nun alle Klarheiten beseitigt? :p
CPU Speicher Handles werden oft als "Zeiger" bezeichnet. Jedoch sind "Zeiger" im eingentlichen Sinn des Wortes nicht so restriktive zu sehen und bezeichnen allgemein ein zeigendes im Sinn von referenzierendes Objekt.
-
kingruedi schrieb:
handle schrieb:
Man soll gar nicht wissen was hinter einem Handle steckt.
Sogar noch ganz anders: Man will es einfach gar nicht.
bis hierhin:
Wenns ein Zeiger wäre, müsste man ja wissen was es ist, man bräuchet ja den Typ zum dereferenzieren.
Und versuche mal wer ein Handle zu dereferenzieren ...
Ziel ist es ja eben den direkten Zugriff zu unterbinden. Wenn man jetzt weis, was man mit Zeigern so alles anstellen kann, dürfte klar sein, dass ein Handle kein Zeiger ist.
-
Oft steckt hinter einem Handle auch ein normaler Zeiger in den Speicher. Dann kann man es auch dereferenzieren.
-
............... schrieb:
Oft steckt hinter einem Handle auch ein normaler Zeiger in den Speicher. Dann kann man es auch dereferenzieren.
...............
-
Pellaeon schrieb:
Ziel ist es ja eben den direkten Zugriff zu unterbinden. Wenn man jetzt weis, was man mit Zeigern so alles anstellen kann, dürfte klar sein, dass ein Handle kein Zeiger ist.
Nö. Ziel ist es einfach nur, wiederverwendbare funktionen zu schreiben, die es mir ermöglichen die selben Funktionen auf verschiedene Objekte auszuführen. Das beste Beispiel dafür sind die f*-Funktionen. (fopen, fclose, fgets, fputs, etc.)
Ich finde den Post von "yet_another_kenner" eigentlich am besten zutreffend.
krasstala schrieb:
Außerdem sehe ich einen Unterschied zwischen Embedded World und Windows World.
Welchen/Wieso?
-
junix schrieb:
Das beste Beispiel dafür sind die f*-Funktionen. (fopen, fclose, fgets, fputs, etc.)
Stimm ich dir voll zu: Dateiarbeit ist ein schönes Beispiel: da werden kein Zeiger rausgegeben. Man erhält lediglich eine Nummer: das File-Handle.
-
Pellaeon schrieb:
Stimm ich dir voll zu: Dateiarbeit ist ein schönes Beispiel: da werden kein Zeiger rausgegeben. Man erhält lediglich eine Nummer: das File-Handle.
... ist aber nicht das allein gültige Beispiel! Was ist denn schlussendlich ein Zeiger? Nichts weiter als der Index eines riesigen (2n, also z.B. 232 = 4294967296 Arrayplätze) Arrays.
Es ist völlig irelevant, was hinter einem Handle Steckt. Das Handle ist einfach ne eindeutige ID, welche es ermöglicht, Funktionen mehrfach verwendbar zu machen. Nichts weiter. Wie das im Einzelnen implementiert ist, liegt in der Kompetenz der einzelnen Softwerker.
-
junix schrieb:
Das Handle ist einfach ne eindeutige ID
Sag ich doch die ganze Zeit!! Und nen Zeiger beinhaltet ne Adresse und keine ID.
Das sind nunmal 2 verschiedene Konzepte. Sie haben zwar dasselbe Ziel: Zugriff auf irgend etwas, aber der Weg zum Ziel ist nunmal ein anderer.
-
[quote="junix"]
Pellaeon schrieb:
Es ist völlig irelevant, was hinter einem Handle Steckt. Das Handle ist einfach ne eindeutige ID, welche es ermöglicht, Funktionen mehrfach verwendbar zu machen. Nichts weiter. Wie das im Einzelnen implementiert ist, liegt in der Kompetenz der einzelnen Softwerker.
Nein, es kann mehr als ne ID sein. Bei nem aktuellen Projekt werden in C auch Handles verwendet, aber die behalten ne ID, nen Mapping in einem Speicherbereich, verschiedene Flags usw.
Ich find bisher auch den Post von yet_another_kenner am passensten das damit ein wenig versucht wird OOP zu betreiben, weils Objekte ja gerade in C nicht gibt, man aber irgendwie trotzdem sowas ähnliches brauch um immer darauf zugreifen zu können.
-
Talla schrieb:
Nein, es kann mehr als ne ID sein. Bei nem aktuellen Projekt werden in C auch Handles verwendet, aber die behalten ne ID, nen Mapping in einem Speicherbereich, verschiedene Flags usw.
Woraus resultiert, das dein "Handle" nichts weiter als ein Zeiger ist, der - wie ich weiter oben festgestellt hatte - auch nichts weiter als eine ID für ein bestimmtes Element des Arrays "Speicher" ist.
Man kann sich auch gut an der Übersetzung von "Handle" ins Deutsche orientieren: "Handle" heisst nichts anderes als "Griff" ... wo der Griff nun aber befestigt ist (ein ganzes Objekt, nur eine Struktur oder einfach nur ein einzelnes Byte) ist völlig egal. Es soll nur einfach bestimmte Daten wieder greifbar machen, wenn eine Funktion aus einer Bibliothek aufgerufen wird.
-
@junix wie definierst du Zeiger?
Ich verstehe darunter eine Variable, welche eine Adresse enthält. Eine ID ist keine Adresse für mich. Das ist eher sowas wie ein Primary Key. Ich kann jemand damit identifizieren. Darum muss ich aber noch lange nicht wissen, wo er wohnt.
Daher ist für mich ein Handle kein Zeiger. Hinter dem Handle kann ein Zeiger stecken, ja klar, oder ne Datei oder sonstwas, aber das Handle an sich ist doch kein Zeiger. Zumindest nicht im Sinne eines Zeigers in C/C++/Pascal/usw.