none
LoadLibrary RRS feed

  • Question

  • bonjour

    j'ai un message d'erreur qui me parait erroné:

    1>d:\usr\memoria\dev\dbms\onlinedbmanager\ibpp-2-5-3-1-src\core\_ibpp.cpp(141): error C2664: 'LoadLibraryW' : impossible de convertir le paramètre 1 de 'const char *' en 'LPCWSTR'
     sur l'instruction de ibpp

    mHandle = LoadLibrary(path.c_str());

    ou la déclaration de path est un std::string. le compilateur a trouvé un LoadLibraryW.

    Je ne voudrais pas toucher beaucoup à IBPP qui est un framework d'attaque des bases de données en sql


    Jean Noël Martin



    lundi 14 mai 2012 08:58

Réponses

  • Pas de panic, Vous êtes devant le mécanisme de gestion des version ASCII et UNICODE des exécutables. ;-)

    Quasi-toutes les API Win32 acceptants des chaînes de caractères existent en 2 versions.

    Celles acceptant des chaines de caractères en ASCII (obsolètes) et celles acceptants des chaines de caratères UNICODE.

    Donc LoadLibrary n'existe pas, c'est soit LoadLibraryA pour les chaines de caractères en ASCII, soit LoadLibraryW pour les chaines de caractères UNICODE.

    LoadLibrary n'est qu'un #define sur l'une ou l'autre de ces fonctions, en fonction des constantes de compilations qui indique si l'on compile un exécutable UNICODE ou ASCII.

    Au vue du message d'erreur, vous êtes en UNICODE, et c'est bien.

    Utilisez un tstring comme type de path.

    http://www.liquid-technologies.com/Reference/XmlDataBinding/source/API/CPP/Key%20Concepts/tstring.htm


    Paul Bacelar, Ex - MVP VC++

    lundi 14 mai 2012 11:29
    Modérateur
  • Ok j'y vais: je crois que LoadLibraryA sera bon. J'ai plusieurs cas du même style et je vais les traiter comme celà. Je reviens pour donner le résultat.

    Ca marche et ca clos cette discussion


    Jean Noël Martin


    • Modifié JeanNoel53 mardi 15 mai 2012 00:48
    • Marqué comme réponse JeanNoel53 mardi 15 mai 2012 00:48
    lundi 14 mai 2012 12:22

Toutes les réponses

  • Le compilateur génère rarement des messages erronés ;)
     
    Vous spécifiez un paramètre de type char *, alors que la fonction
    attend un paramètre wchar_t * (unicode).
     
    lundi 14 mai 2012 11:09
    Auteur de réponse
  • Pas de panic, Vous êtes devant le mécanisme de gestion des version ASCII et UNICODE des exécutables. ;-)

    Quasi-toutes les API Win32 acceptants des chaînes de caractères existent en 2 versions.

    Celles acceptant des chaines de caractères en ASCII (obsolètes) et celles acceptants des chaines de caratères UNICODE.

    Donc LoadLibrary n'existe pas, c'est soit LoadLibraryA pour les chaines de caractères en ASCII, soit LoadLibraryW pour les chaines de caractères UNICODE.

    LoadLibrary n'est qu'un #define sur l'une ou l'autre de ces fonctions, en fonction des constantes de compilations qui indique si l'on compile un exécutable UNICODE ou ASCII.

    Au vue du message d'erreur, vous êtes en UNICODE, et c'est bien.

    Utilisez un tstring comme type de path.

    http://www.liquid-technologies.com/Reference/XmlDataBinding/source/API/CPP/Key%20Concepts/tstring.htm


    Paul Bacelar, Ex - MVP VC++

    lundi 14 mai 2012 11:29
    Modérateur
  • Ok j'y vais: je crois que LoadLibraryA sera bon. J'ai plusieurs cas du même style et je vais les traiter comme celà. Je reviens pour donner le résultat.

    Ca marche et ca clos cette discussion


    Jean Noël Martin


    • Modifié JeanNoel53 mardi 15 mai 2012 00:48
    • Marqué comme réponse JeanNoel53 mardi 15 mai 2012 00:48
    lundi 14 mai 2012 12:22