Il compilatore C/C++, per default, allinea i membri delle strutture in memoria utilizzando 8 byte, il VB6 usa il default di 4 byte.

In certi casi, a secondo di come è fatta la struttura, si potrebbero manifestare i problemi che hai avuto.

Se indichi al compilatore C/C++ di utilizzare l'allineamento a 4 byte (come fa VB6) tutto va a posto.

Per l'altro problema, mi sembra che la Param_Load restituisca un int mentre quella in VB6 restituisce un Integer (dovrebbe essere un Long).