SDL_AllocRW

Nom

SDL_AllocRW -- Alloue une structure SDL_RWops vide.

Synopsis

   1 #include "SDL_rwops.h"
   2 
   3 SDL_RWops *SDL_AllocRW(void);

Description

SDL_AllocRW alloue une structure SDL_RWops vide. Vous devez remplir les champs vous même.

Valeur de retour

Renvoie un pointeur sur la zone mémoire allouée en cas de succès, NULL s'il y a une erreur.

Note: Vous devez libérer toute la mémoire allouée par SDL_AllocRW avec SDL_FreeRW. Selon votre système d'exploitation et de vôtre compilateur, il peut y avoir une différence entre les versions de malloc() et free() que votre programme utilise et les versions que SDL utilise. Essayer de combiner les deux peut faire planter le programme, comme une erreur de segmentation par exemple.

Exemple

   1 #include <string.h>    /* pour memset */
   2 #include "SDL_error.h" /* pour SDL_SetError */
   3 #include "SDL_rwops.h"
   4 
   5 /* Ces fonctions ne devraient pas être utilisées pour des pointeurs autres que ceux qui pointent sur des RWops */
   6 static int myseekfunc(SDL_RWops *context, int offset, int whence)
   7 {
   8   SDL_SetError("Impossible de chercher dans ce genre de RWops");
   9   return(-1);
  10 }
  11 
  12 static int myreadfunc(SDL_RWops *context, void *ptr, int size, int maxnum)
  13 {
  14   memset(ptr,0,size*maxnum);
  15   return(maxnum);
  16 }
  17 
  18 static int mywritefunc(SDL_RWops *context, const void *ptr, int size, int num)
  19 {
  20   return(num);
  21 }
  22 
  23 static int myclosefunc(SDL_RWops *context)
  24 {
  25   if(context->type != 0xdeadbeef)
  26   {
  27     SDL_SetError("Mauvais type de RWops pour myclosefunc()");
  28     return(-1);
  29   }
  30 
  31   free(context->hidden.unknown.data1);
  32   SDL_FreeRW(context);
  33   return(0);
  34 }
  35 
  36 /* Notez que cette fonction N'EST PAS statique -- nous voulons qu'elle puisse être appelée directement à partir d'autres fichiers sources */
  37 SDL_RWops *MyCustomRWop()
  38 {
  39   SDL_RWops *c=SDL_AllocRW();
  40   if(c==NULL) return(NULL);
  41 
  42   c->seek =myseekfunc;
  43   c->read =myreadfunc;
  44   c->write=mywritefunc;
  45   c->close=myclosefunc;
  46   c->type =0xdeadbeef;
  47   c->hidden.unknown.data1=malloc(256);
  48   return(c);
  49 }

Voir aussi

SDL_FreeRW

SDLDoc-fr/SDL_AllocRW (last edited 2009-02-14 14:04:03 by JohnnyJazeix)