Was ist ein handle in der Software
-
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.
-
Pellaeon schrieb:
@junix wie definierst du Zeiger?
Ich mag keine Selbstzitate, aber:
junix schrieb:
Was ist denn schlussendlich ein Zeiger? Nichts weiter als der Index eines riesigen (2n, also z.B. 232 = 4294967296 Arrayplätze) Arrays.
Nenn das Array Speicher und du hast exakt die Situation... Ist lediglich eine abstraktere Sichtweise.
-
Interessante Diskussion, Leute! Weiter so...
-
junix schrieb:
Pellaeon schrieb:
@junix wie definierst du Zeiger?
Ich mag keine Selbstzitate, aber:
junix schrieb:
Was ist denn schlussendlich ein Zeiger? Nichts weiter als der Index eines riesigen (2n, also z.B. 232 = 4294967296 Arrayplätze) Arrays.
Nenn das Array Speicher und du hast exakt die Situation... Ist lediglich eine abstraktere Sichtweise.
*gg* Dann caste dein Handle mal zu nem Zeiger(oder du musst das ja nicht machen, ist ja schon ein Zeiger bei dir) und nun greif mal drauf zu. Ich schätze dann wirst ne Überraschung erleben ... . Wenns ein Zeiger ist, dürfte ja nix passieren.
-
Vielleicht könnte man sagen es gibt direkte Zeiger und indirekte Zeiger und Handles sind meistens indirekte Zeiger.
-
junix schrieb:
Ist lediglich eine abstraktere Sichtweise.
Denk darüber nach und über den Rest der hier gesagt wurde. Und tu dir selber nen Gefallen und meld dich erst wieder wenn dus auch verstanden hast.
-
Pellaeon schrieb:
*gg* Dann caste dein Handle mal zu nem Zeiger
Welchen Handle, zum Henker
? Ein Handle kann intern alles mögliche sein. Mann bist du ein sturer Begriffstutziger!! Das Wort Handle ist ein abtrakter Begriff. Es kann je nach API, Bibliothek und Kontext unterschiedlich implementiert sein.
Hier mal ein Auszug aus commctrl.h des PSDK:
typedef struct _TREEITEM *HTREEITEM;
Wenn du schon nicht begreifen willst, was dir hier alle einstimmig erklären, dann gib dich erst einmal damit zufrieden, dass du in diesem Fall einfach nur falsch liegst. Vielleicht kapierst du es irgendwann später mal, wenn du nicht-triviale Software entwickelst.
Sorry, das musste raus.
-
@junix -> in dem embedded Bereich, wo ich Software zum sehen bekam, waren Handles meistens ID's.
Es gibt sicherlich auch andere Möglichkeiten.Allgemein noch zu diesem Forum -> Foren sind nützlich und sinnvoll. Aber ich meine dass man niemals Beleidigend sein sollte. Ich ziehe es vor, sachlich und neutral zu sein. Jeder Mensch sieht die Dinge von an einem anderen Betrachtungswinkel aus.
Mir ist aufgefallen, dass es hier ganz schon deftig zugeht. Ich kenne andere Foren...
Frohes Fest und guten Rutsch an euch alle.
Krasstala
-
krasstala schrieb:
@junix -> in dem embedded Bereich, wo ich Software zum sehen bekam, waren Handles meistens ID's.
Hmmmm...
junix schrieb:
Was ist denn schlussendlich ein Zeiger? Nichts weiter als der Index eines riesigen (2n, also z.B. 232 = 4294967296 Arrayplätze) Arrays.
Von daher erschliesst sich mir der UNterschied Embedded-Software-> übrige Software noch immer nicht...
Ich dachte es sei mittlerweile klar, das ein Handle, wie es oben nochmals jemand ausdrücklich erwähnt hat, ein abstrakter "Überbegriff" ist, dessen Ausführung nicht festgelegt, und vom optimalen Lösungsweg abhängig ist?
krasstala schrieb:
Allgemein noch zu diesem Forum -> Foren sind nützlich und sinnvoll. Aber ich meine dass man niemals Beleidigend sein sollte. Ich ziehe es vor, sachlich und neutral zu sein. Jeder Mensch sieht die Dinge von an einem anderen Betrachtungswinkel aus.
Richtig. Nur ist es unnötig zu diskutieren, wenn man sich ausser Stande sieht, den Punkt des Kontrahenden nachzuvollziehen... nicht wahr? Es hilft nicht immer, wenn man das selbe Argument in anderen Worten wiederholt (o;
krasstala schrieb:
Frohes Fest und guten Rutsch an euch alle.
Danke gleichfalls :xmas1:
-
junix schrieb:
junix schrieb:
Ist lediglich eine abstraktere Sichtweise.
Denk darüber nach und über den Rest der hier gesagt wurde. Und tu dir selber nen Gefallen und meld dich erst wieder wenn dus auch verstanden hast.
Das kann ich so zurück geben. Ich vermische nicht Zeiger mit Handle. Das sind 2 vverschiedene Dinge, darüber solltest du vielleicht mal nachdenken.
Und nur weil in irgendwelchen Bibliotheken irgendwer seinen Datentyp Handle genannt hat, heißt das noch lange nicht, dass es auch eins ist.
-
Ist ne Hantel nicht so eine stange mit 2 gewichten an den enden?
-
Pellaeon: Jeder Zeiger ist ein Handle.