"You are thinking that maybe the calling convention is wrong?"
Unlikely. It can be wrong only if you changed the default from cdecl to stdcall or fastcall.
Hmm, the code looks correct. The 4 pops after the calls aren't really needed but they don't hurt.
Heap corruption + stack allocated using malloc (I assume)... are you sure the intial native stack pointer is correct?