La portion de code ci dessous marche sous GeePee32 v0.40, mais pas sur ma GP 32

l'ouveture du fichier est réussie mais le premier GpFileRead échoue, j'obtient juste à près l'exécution de cette ligne (en trafiquant un peu le porgramme):
i=0
tag={0, ...}
GpReadFile renvoi le code erreur 11 ( ERR_INVALID_PARAM )
voici la portion de code:
flip_lcd,wait_start,fade_out sont des macros
formula1_path est une constante et vaut "gp:\gpmm\formula1"
error est une variable globe (pour afficher un message d'erreur et quitter le prog sereinement même en cas d'erreur)
// Les prototypes
int load_file(void*, const char*, const char*);
void charger_images(void);
// Chargement d'un fichier
int load_file(void *dest, const char *p_file, const char *type)
{
char chemin[256], tag[5]={0, 0, 0, 0, '\0'};
int key; // utilisée dans wait_start
unsigned long size, i;
F_HANDLE *file=NULL;
gm_strcpy(chemin, formula1_path);
gm_strcat(chemin, "\");
gm_strcat(chemin, p_file);
if(GpFileOpen(chemin, OPEN_R, file))
{
error=3;
goto end;
}
if (gm_compare(tag, GPG_TAG))
{
error=3;
goto end;
}
GpFileRead((F_HANDLE)*file, &size, 4, (ulong*)&i);
if (i!=4)
{
error=3;
goto end;
}
GpFileRead((F_HANDLE)*file, dest, (ulong)size, (ulong*)&i);
if (i!=(ulong)size)
{
error=3;
goto end;
}
end:
if (file) GpFileClose(*file);
return error;
}
// Chargement de toutes les images necessaires au jeu
void charger_images(void)
{
int i, key;
// Chargement des images
load_file((char*)car1, "CAR1.GPG", GPG_TAG);
load_file((char*)car2, "CAR2.GPG", GPG_TAG);
load_file((char*)card1, "CARD1.GPG", GPG_TAG);
load_file((char*)card2, "CARD2.GPG", GPG_TAG);
end:
disp_msg("Passage dans \"charger_images\"", BLEU);
flip_lcd();
wait_start();
fade_out();
}
J'aimerais que vous m'aidiez à trouver l'origine du bogue

Merci d'avance