IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DevIL Discussion :

problème avec ilSetMemory


Sujet :

DevIL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 12
    Points : 7
    Points
    7
    Par défaut problème avec ilSetMemory
    Bonjour à tous,

    Je suis en train de programmer un gros projet utilisant entre autre Devil sous linux (Ubuntu 9.10 32 bits) et je voudrais porter mon projet sous windows 7 32bits. Or j'y utilise Devil d'une manière assez particulière car l'allocation et la libération de la mémoire passent par mes propres fonctions grâce à la fonction de Devil : ilSetMemory. Or sous windows, cette fonction semble faire planter mon application. J'ai fait un programme minimal pour ilustrer mon problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <iostream>
    #include <IL/il.h>
    #include <cstdlib>
     
    using namespace std;
     
    void * _Alloc_CB(const ILsizei iSize)
    {
        return malloc(iSize);
    }
     
    void _Free_CB(const void * CONST_RESTRICT iBuf)
    {
        free((void *)iBuf);
    }
     
    int main()
    {
        ilSetMemory((mAlloc)_Alloc_CB, (mFree)_Free_CB);
        ilInit();
        ilShutDown();
     
        return 0;
    }
    Pour compiler ce code j'utilise code::block avec mingw32.
    Le programme compile parfaitement mais lors de l'exécution, il plante dans la fonction "_Alloc_CB". Si j'enlève la ligne "ilSetMemory(..." le programme s'exécute de nouveau parfaitement. Si je met "ilInit();" avant "ilSetMemory(...", le programme plante cette fois dans "_Free_CB" (Ce qui me semble assez logique après tout).

    Je précise que ce code compile et s'exécute parfaitement sous linux. J'utilise la version 1.78 de Devil (qui est la dernière version), mais j'ai essayé toutes les versions de la forme 1.7x mais ça plante toujours au même endroit, de plus il est hors de question que je j'utilise une version inférieur aux 1.7 car il y manquerait des fonctions dont j'ai besoin.

    Voila, si vous avez une idée d'où mon problème peux bien venir n'hésitez pas à me le dire.

    Je vous remercie d'avance.
    Koubykoub.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Rebonjour,

    J'ai réglé tout seul mon problème :
    Il faut mettre ILAPIENTRY devant les déclarations des call back (_Alloc_CB et _Free_CB), ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include <iostream>
    #include <IL/il.h>
    #include <cstdlib>
     
    using namespace std;
     
    ILAPIENTRY void * _Alloc_CB(const ILsizei iSize)
    {
        return malloc(iSize);
    }
     
    ILAPIENTRY void _Free_CB(const void * CONST_RESTRICT iBuf)
    {
        free((void *)iBuf);
    }
     
    int main()
    {
        ilSetMemory(_Alloc_CB, _Free_CB);
        ilInit();
        ilShutDown();
     
        return 0;
    }
    Notez que l'on est plus obligé de caster "_Alloc_CB" et "_Free_CB" dans "ilSetMemory". La raison pour laquel ça marche bien sous linux est que "ILAPIENTRY" est une définition vide.

    Voila, Désolé pour avoir posté trop vite...

    koubykoub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo