Le API di Windows usano come convenzione di chiamata stdcall, mentre lì nel typedef non hai specificato alcuna convenzione di chiamata, per cui, salvo impostazioni contrastanti a livello di progetto, di default è cdecl. Ovviamente chiamando una funzione con una convenzione di chiamata differente da quella che si aspetta il risultato è la corruzione dello stack.
Per risolvere, cambia il typedef in
codice:
typedef  HGLOBAL (WINAPI * GLOBALALLOC)(UINT,SIZE_T);
(WINAPI non è altro che un #define per __declspec(stdcall)).