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

C++ Discussion :

Programmation Windows Mobile, LoadLibrary failed


Sujet :

C++

  1. #1
    Membre � l'essai
    Inscrit en
    Mai 2008
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par d�faut Programmation Windows Mobile, LoadLibrary failed
    Bonjour,

    Je charge un dll � partir d'une application. La fonction est suivante :

    bool mgf:Library::load( const std::string& libName ){

    #ifdef _WIN32_WCE

    wchar_t* tmp = (wchar_t*) new wchar_t[libName.size()+1];

    mbstowcs( tmp, libName.c_str(), (size_t)(libName.size()+1) );

    _lib = LoadLibrary( (LPCWSTR)tmp);

    delete[] tmp;
    #endif
    }
    LoadLibrary renvoie une r�f�rence non nulle mais le descripteur dans le debugger indique {unused = 1021676848}
    GetLastError donne le code error 0 (System was out of memory, executable file was corrupt, or relocations were invalid) mais je ne vois pas d'ou pourrait venir le probl�me.

    - Je d�veloppe pour Windows Mobile 5.0, sous Visual Studio 2005, avec Windows Mobile SDK.
    - Je met le dll � charger dans le r�pectoire /Windows de l'appareil puisque quand je met dans le m�me r�pectoire que l'�x� �a ne se charge pas (code error 126)

  2. #2
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Bonjour et bienvenu,
    Je vais peut �tre dire quelque chose de stupide mais si _lib n'est pas NULL, que t'importe que le debugger �crive unused = 1021676848 ? As-tu essay� de r�cup�rer une fonction (GetProcAddress ) ?

  3. #3
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Je compl�terai en disant que la valeur retourn�e par GetLastError() n'est valide que si il y a eu une erreur. Si le LoadLibrary() ne retourne pas en erreur(pointeur non null) ce qui semble �tre la cas, il ne faut pas regarder GetLastError().
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre � l'essai
    Inscrit en
    Mai 2008
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par d�faut
    Ah merci. J'au regard� dans l'onglet Module et Output de Visual, apparament le module est bien charg�, le GetProcAdress renvoie null code error 87 (parametre invalide), peut etre que le point d'entr�e de la dll n'est pas trouv�??? (Est ce que c'est pour ca que le descriptor indique une valeur unused??)

    J'ai un fichier .def qui est :

    LIBRARY plgVrmlGL
    EXPORTS
    registerNodeCreators
    registerModules
    Et le .h

    #ifndef _VRGL_PLUGIN_H_
    #define _VRGL_PLUGIN_H_

    #if !defined WIN32 && !defined _WIN32_WCE
    extern "C" {
    #endif
    std::vector<mgf::Module*> registerModules( void );
    #if !defined WIN32 && !defined _WIN32_WCE
    }
    #endif


    #if !defined WIN32 && !defined _WIN32_WCE
    extern "C" {
    #endif
    std::vector<mgf::NodeCreator*> registerNodeCreators( void );
    #if !defined WIN32 && !defined _WIN32_WCE
    }
    #endif

    #endif
    Je ne vois pas qu'est qui peut bloquer l'utilisation du dll. Trop d�prim�

  5. #5
    Membre � l'essai
    Inscrit en
    Mai 2008
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par d�faut
    Pour ajout�, jai un autre fichier .h qui se charge d'exporter la dll

    #if defined(_MSC_VER) && defined(VRGL_DLL)
    # ifdef VRGL_BUILD
    # define VRGL_EXPORT __declspec(dllexport)
    # else
    # define VRGL_EXPORT __declspec(dllimport)
    # endif
    #else
    # define VRGL_EXPORT
    #endif
    Je viens d'essayer de mettre VRGL_EXPORT devant les fonctions, GetProcAdress renvoie toujours NULL. Alors est qu'il y a une config sp�cial sous Visual pour Windows Mobile pour exporter les dll.....

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Code ridicule : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    wchar_t* tmp = (wchar_t*) new wchar_t[libName.size()+1];
     
    mbstowcs( tmp, libName.c_str(), (size_t)(libName.size()+1) );
     
    _lib = LoadLibrary( (LPCWSTR)tmp);
    Alors �a, c'est le pompon:
    • Le premier cast est encore plus inutile que le cast du retour de malloc() en C.
    • std::basic_string::size_type est pratiquement tout le temps d�j� un size_t, donc cast inutile. De plus, il est incorrect de pr�sumer qu'on aura le m�me nombre de wchar_t que de char.
    • Les casts entre ANSI et unicode, c'est mal. Et l� encore, le cast est inutile de toute fa�on.
    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.

  7. #7
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    De plus, il est incorrect de pr�sumer qu'on aura le m�me nombre de wchar_t que de char.
    Tu peux pr�ciser stp ? Pour moi, c'est forc�ment <=, dans ce sens l�. Et comme libName.c_str() est garanti d'�tre termin� par un z�ro terminal, �a me semble correct �a pour le coup. Ou j'ai loup� un truc ?

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Citation Envoy� par white_tentacle Voir le message
    Tu peux pr�ciser stp ? Pour moi, c'est forc�ment <=, dans ce sens l�. Et comme libName.c_str() est garanti d'�tre termin� par un z�ro terminal, �a me semble correct �a pour le coup. Ou j'ai loup� un truc ?
    Inf�rieur ou �gal, c'est possible, mais j'ignore s'il est garanti qu'aucune page de codes au monde ne comprend un caract�re qui soit hors du BMP...
    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.

  9. #9
    Membre � l'essai
    Inscrit en
    Mai 2008
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Par d�faut
    Les casts entre ANSI et unicode, c'est mal
    Peut �tre, mais c'est la seule solution pour l'instant que l'ai trouv�, car l'environnement Windows Mobile est que UNICODE, et l'entr�e du programme utilise ANSI.

    Par contre, mon probl�me de GetProcAdress renvoie NULL est r�solu si je fais le m�me cast (de ANSI en UNICODE pour le nom de la fonction en entr�e de GetProcAdress)

    Si tu as une autre fa�on plus performente pour caster cela merci de m'indiquer, car l�... je ne m'y connais pas beaucoup. Merci d'avance

  10. #10
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Normalement, ceci suffit:
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    int cchSizeW = MultiByteToWideChar(CP_ACP, 0, libName.c_str(), -1, NULL, 0);
    wchar_t* tmp = new wchar_t[cchSizeW];
     
    MultiByteToWideChar(CP_ACP, 0, libName.c_str(), -1, tmp, cchSizeW);
     
    _lib = LoadLibrary(tmp);
     
    delete[] tmp;
    Aucun cast explicite n�cessaire tant que tu compiles en unicode.
    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.

Discussions similaires

  1. Programmation Windows mobile
    Par lolita4882 dans le forum Windows
    R�ponses: 1
    Dernier message: 31/12/2008, 07h51
  2. R�ponses: 1
    Dernier message: 01/08/2008, 16h08
  3. D�buter un programme Delphi 2007 pour Windows Mobile 6
    Par arnaudG dans le forum Delphi .NET
    R�ponses: 7
    Dernier message: 31/01/2008, 18h29
  4. Programmation Windows Mobile avec GUI en C++
    Par Luke58 dans le forum Visual C++
    R�ponses: 1
    Dernier message: 13/03/2007, 17h39
  5. R�ponses: 4
    Dernier message: 09/09/2006, 21h48

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