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

Windows Discussion :

[win32] dllimport function not allowed


Sujet :

Windows

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Points : 145
    Points
    145
    Par défaut [win32] dllimport function not allowed
    Bonjour,
    j'ai l'erreur suivante :

    error C2491: 'JS_XDRUint16' : definition of dllimport function not allowed
    déf :
    JS_XDRUint16(JSXDRState *xdr, uint16 *s)
    {
    uint32 l = *s;
    if (!JS_XDRUint32(xdr, &l))
    return JS_FALSE;
    *s = (uint16) l;
    return JS_TRUE;
    }
    Déclaration :
    extern JS_PUBLIC_API(JSBool)
    JS_XDRUint16(JSXDRState *xdr, uint16 *s);
    J'aimerai en savoir + sur les causes de cette erreur que je vois pour la première fois,

    merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Ca n'a pas l'air d'être la cause de l'erreur : il n'a pas de __declspec(dllimport) dans la définition de sa fonction...

    Famidoo:

    1. Question peut-être bête, mais c'est quoi la macro JS_PUBLIC_API ?
    2. et en complétant la définition (avec JSBool par ex), ça donne quoi ?
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Points : 145
    Points
    145
    Par défaut
    #define JS_PUBLIC_API(t) JS_EXPORT_API(t)
    #define JS_EXPORT_API(__type) _declspec(dllexport) __type

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Points : 145
    Points
    145
    Par défaut
    la définition exacte c'est ça :
    JS_PUBLIC_API(JSBool)
    JS_XDRUint16(JSXDRState *xdr, uint16 *s)

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Points : 145
    Points
    145
    Par défaut
    J'ai corrigé l'erreur pour en avoir une autre maintenant ^^, enfin disons un warning :
    warning C4273: 'JS_XDRMemGetData' : inconsistent dll linkage

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Là encore, c'est un problème de dllimport/dllexport/riendutout.
    Il doit y avoir deux déclarations/définitions qui n'ont pas la même option (parmi les trois spécifiées ci-dessus).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Points : 145
    Points
    145
    Par défaut
    bin disons que oui la définition est maintenant différente de la déclaration mais sinon j'ai l'erreur du topic.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Il ne doit pas en être ainsi.

    Le projet, c'est justement la DLL, non? Ou bien tu tentes d'utiliser une DLL ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La définition doit bien être différente de la déclaration, vu que seule cette dernière doit comporter la directive d'exportation.

    Par contre si tu as cette erreur c'est peut-être que tu as deux déclarations différentes (une avec la directive d'exportation, l'autre sans).

  11. #11
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Points : 145
    Points
    145
    Par défaut
    Le projet, c'est justement la DLL, non?
    oui, sans compter qu'au niveau des link j'ai ce genre de choses :
    jsscope.obj : error LNK2001: symbole externe non résolu free
    alors que les bonnes bibliothèques sont bien surs présentes ( sinon erreur de compilation ce qui n'est pas le cas), même erreur avec fopen et compagnie :
    jsprf.obj : error LNK2019: symbole externe non résolu printf référencé dans la fonction BuildArgArray

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce qu'il faut savoir pour une DLL, c'est que Chaque DLL a généralement sa propre définition qui NOMDELADLL_API qui est soit __declspec(dllexport), soit __declspec(dllimport), mais jamais les deux en même temps.

    Ainsi, le header comporte souvent ce passage. Imaginons que je compile UneDllAvecUnNomBienLong.dll :
    Code UneDllAvecUnNomBienLong.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifdef UNEDLLAVECUNNOMBIENLONG_EXPORTS
    #define UNEDLLAVECUNNOMBIENLONG_API __declspec(dllexport)
    #else
    #define UNEDLLAVECUNNOMBIENLONG_API __declspec(dllimport)
    #endif
    
    /* Une déclaration de fonction 
       (sachant que sous Visual, la macro EXTERN_C est définie comme il faut) */
    EXTERN_C UNEDLLAVECUNNOMBIENLONG_API int UneFonction(char *);
    La définition de fonction, se trouvant dans la DLL, possède les mêmes préfixes EXTERN_C et UNEDLLAVECUNNOMBIENLONG_API.

    Ainsi, lorsqu'on compile la DLL, la macro UNEDLLAVECUNNOMBIENLONG_EXPORTS doit être définie pour tout le projet (généralement dans les propriétés du projet, à la rubrique "préprocesseur").
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Points : 145
    Points
    145
    Par défaut
    #define JS_EXTERN_API(__type) extern _declspec(dllexport) __type
    #define JS_EXPORT_API(__type) _declspec(dllexport) __type
    #define JS_EXTERN_DATA(__type) extern _declspec(dllexport) __type
    #define JS_EXPORT_DATA(__type) _declspec(dllexport) __type
    et pour import j'ai ca :

    #if defined(_WIN32) && !defined(__MWERKS__)
    # define JS_IMPORT_DATA(__x) _declspec(dllimport) __x

    # define JS_IMPORT_API(__x) _declspec(dllimport) __x
    # endif

  14. #14
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    460
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2005
    Messages : 460
    Points : 145
    Points
    145
    Par défaut
    j'ai trouvé merci, ca venait bien des définitions préprocesseur

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/06/2009, 15h05
  2. Réponses: 0
    Dernier message: 24/06/2008, 23h51
  3. [Castor] Content is not allowed in prolog.
    Par marsupilamuf dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 01/09/2004, 07h59
  4. Réponses: 8
    Dernier message: 21/11/2003, 18h38
  5. erreur Host not allowed to connect
    Par ziboux dans le forum Outils
    Réponses: 9
    Dernier message: 16/10/2003, 05h08

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