[Win32/C++] Wat gaat er fout? (GetProcAddress)

Pagina: 1
Acties:

  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Ik heb het volgende stukje code:
C++:
1
2
3
4
5
6
7
8
9
typedef bool (*MYPROC)(HWND,int,UINT,UINT); 

ATOM atje = GlobalAddAtom("F7Key");
HINSTANCE hinsta;
MYPROC ProcAdd; 

hinsta=LoadLibrary("user32.dll");
ProcAdd = (MYPROC)GetProcAddress(hinsta,"RegisterHotKey");
bool result = (ProcAdd)(hwnd,atje,NULL,VK_F7); 


Ik krijg dan de volgende error:

Afbeeldingslocatie: http://members.webdeveloping.nl/~b-man/Error.gif

zodra ik ProcAdd vervang door RegisterHotKey dan gaat het wel goed. En als ik op negeren klik en verder debug, dan lijkt het programma ook wel goed te werken verder, de hotkey is wel geregistreerd!
De definitie van RegisterHotKey is:

code:
1
2
3
4
5
6
7
BOOL RegisterHotKey(

    HWND hWnd,  // window to receive hot-key notification
    int id, // identifier of hot key
    UINT fsModifiers,   // key-modifier flags
    UINT vk     // virtual-key code
   );


Bedankt voor jullie hulp, het zal waarschijnlijk wel weer iets lulligs zijn |:(

Edit: oja, de error komt op de laatste regel!

[ Voor 5% gewijzigd door PKP B-Man op 12-10-2003 20:48 ]


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

typedef bool (WINAPI *MYPROC)(HWND,int,UINT,UINT);

Windows functies gebruiken de STDCALL calling conventie, zonder die WINAPI (gewoon een define naar __stdcall) gebruikt ie de standaard C calling convention, waar de caller de stack schoon moet maken ipv de gecallde functie. Als je de verkeerde gebruikt gaat de stack over de kop en dat is de fout die je krijgt.

www.madwizard.org


  • PKP B-Man
  • Registratie: November 2002
  • Laatst online: 19-07-2023
Ja, dat klinkt logisch!
Bedankt voor de uitleg!
Het werkt trouwens prima!

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 20:03

johnwoo

3S-GTE

Waarom zou je die functie eigenlijk dynamisch willen aanroepen? RegisterHotKey bestaat op alle Win32 platforms, dus als je gewoon user32.lib linkt dan heb je em zo al, op iedere Windows versie...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21-08 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Idd... en als wil dat user.lib pas geladen wordt als je 'm nodig hebt dan moet je eens kijken naar delayed loading (/DELAYLOAD linker optie in MSVC++)

overigens:
C++:
1
bool result = (ProcAdd)(hwnd,atje,NULL,VK_F7);


ProcAdd hoeft niet per se tussen haakjes ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.