Toon posts:

[C++] handle

Pagina: 1
Acties:

Verwijderd

Topicstarter
Kan iemand mij uitleggen wat een HANDLE is? Kan ik dit vergelijken met een pointer?

Bij voorbeeld op deze manier in de variabele declaratie:
HANDLE hThreads[N];

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Een HANDLE is meestal gewoon een long, maar geen pointer. Het is gewoon een soort 'magic number' waar je zelf niets mee kan, maar alleen kan doorgeven naar andere functies om er wat mee te doen.

Intern zou het bijvoorbeeld een index in een array van objecten kunnen zijn ofzo, maar dat is voor je programma totaal niet interessant.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
via google: http://www.parashift.com/c++-faq-lite/references.html#faq-8.7
Een HANDLE is meestal gewoon een long, maar GEEEEEN pointer.
In VC++ 6.0 is het een typedef voor een void pointer

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Op maandag 03 juni 2002 09:32 schreef _Mo_ het volgende:
In VC++ 6.0 is het een typedef voor een void pointer
ok, dan is een HANDLE wel een pointer? Ik zat meer aan dingen als een HWND of een HBRUSH of een HIMAGE of een H<whatever> te denken. De strekking van mijn verhaal is meer: "Het maakt niet uit wat het is, gewoon niet aankomen :) ". Ook al was het een pointer, wat moet je er dan mee?

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op maandag 03 juni 2002 09:36 schreef Gerco het volgende:

[..]

ok, dan is een HANDLE wel een pointer? Ik zat meer aan dingen als een HWND of een HBRUSH of een HIMAGE of een H<whatever> te denken. De strekking van mijn verhaal is meer: "Het maakt niet uit wat het is, gewoon niet aankomen :) ". Ook al was het een pointer, wat moet je er dan mee?
De WinAPI gebruikt handles, maar volgens mij (kan het fout hebben hoor...) zijn het gewoon alternatieve benamingen voor pointers naar een structure of void (dus kan eigenlijk alles zijn met een goede cast).
code:
1
2
3
4
typedef struct
{
    int a;
} IntStruct, *IntStructHandle;

Zo'n idee krijg je dan, maar je zou ook gewoon IntStruct *p kunnen doen.
Maar misschien loop ik nu allemaal rare dingen te zeggen hoor :+ Misschien kan iemand met meer ervaring er wat meer licht op werpen (hint hehe)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Dat een handle gedeclareerd is als een void pointer zegt niets over zijn functionaliteit. Een handle moet dus absoluut niet als pointer gezien worden, maar gewoon als een aantal (sizeof(HANDLE)) bytes waar bepaalde functies wat mee kunnen. Maar wat ze er precies mee doen, dat is voor jouw als gebruiker niet interessant (zie Gerco's eerste post).

Zodra je als gebruiker aannames gaat maken over de inhoud van deze handle (en als je het als pointer ziet: over het geheugen waar de pointer naar wijst), dan verpest je het hele idee van wat een HANDLE is... (abstractie).

Hanteer een pointer zoals je met alle primitieve waarden (zoals ints) doet. Kan je gerust in een array zetten, of aan de functie meegeven. Of zelfs een pointer naar laten wijzen, etc.
Pagina: 1