Toon posts:

[C++] Casting

Pagina: 1
Acties:

Verwijderd

Topicstarter
Er zijn verschillende tutorials te vinden over het onderwerp casting. Maar kan hier mijn juiste info niet uithalen. Ik ben geen expert op dit gebied maar het volgende is een vorm van casting als ik het goed heb

code:
1
pfnGetASPI32SupportInfo = ( unsigned long (*)( void )) GetProcAddress(LoadWNASPI32, "GetASPI32SupportInfo");


maar kan geen enkele tutor vinden waarmee ik dit kan verklaren wat er gebeurt, ik snap dat er niet letterlijk een tut is die dit uitlegt maar zoek gewoon het fundament waarmee dit te verklaren is.

Wie kan helpen?

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je C-cast nu naar een function pointer. En wel een functie die 'unsigned long' returned, en als parameters 'void' heeft. Dus "unsigned long foobar() {}", zou je kunnen gebruiken. Dat (*) staat voor een functie. Overigens is dit geen C++ style cast. Die zou static_cast<unsigned long(*)()>(...); gebruiken. (of reinterpret_cast, ligt eraan wat getprocad returned)

Na die * kan je een naam aan geven. Dus als je een functie wilt schrijven die een functie pointer accepteert, dan ziet die er zo uit:

C++:
1
2
3
void dispatch(unsigned long (*funcptr)()) {
   unsigned long i = funcptr();
}


Maar aangezien het bij het casten, alleen om het type gaat, kan je die naam (funcptr hier) weglaten.

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
unsigned long foobar() {
}

// maak een type van de functie ptr, dat MyCallBackFuncPtr heet.
typedef unsigned long (*MyCallBackFuncPtr)();

// declare een variabele van het type
MyCallBackFuncPtr some_func;

// assign een functie
some_func = foobar;
some_func(); // function call

// cast van een void*
void* crash = 0;
some_func = reinterpret_cast<MyCallBackFuncPtr>(crash);
crash(); // crash and burn

Hoop dat het iets duidelijker is nu.

[ Voor 56% gewijzigd door Zoijar op 25-09-2004 12:55 ]