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 :

Problème chargement de librairie


Sujet :

Windows

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut Problème chargement de librairie
    Salut c'est encore moi avec un nouveau problème :
    Alors voilà j'essais de charger une librairie avec cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Load the addin */
    hModule = LoadLibrary( CopyDest );
    if ( !hModule )
    {
        printf( "Could not load addin module \"%s\"!\n", CopyDest );
    }
    Le problème c'est que ça n'arrive pas a charger ma librairie mais je ne sais pas pourquoi :S
    De plus je ne peux pas accéder ni modifier cette librairie car elle est fournit en installer un logiciel non open source !
    C'est possible de savoir pourquoi ?

  2. #2
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    GetLastError() peut te donner plus d'info dans le traitement de l'erreur.

    Juste une question tu es sûr du chemin de ta DLL.

    Au fait, on charge des DLL (*.dll) ou des exécutables (*.exe) avec LoadLibrary et pas des librairies (*.lib), c'est vrai que le nom peut prêter à confusion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lpFileName : [in] Pointer to a null-terminated string that names the executable module (either a .dll or .exe file). The name specified is the file name of the module and is not related to the name stored in the library module itself, as specified by the LIBRARY keyword in the module-definition (.def) file.
    .
    voir ici : http://msdn.microsoft.com/en-us/libr...75(VS.85).aspx
    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
    .

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    oui le chemin est bon car je fais le test suivant avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (SearchPath(TargetPath, SourceFileName, ".dll", sizeof(buffer), buffer, &filepart))
    PS : oui je connais bien la différence entre les .lib et les .dll mais bon une dll c'est en quelque sorte une "librairie" pour un éxécutable alors que les .lib c'est pour leur compilation en gros non ?

  4. #4
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    sinon comment on se sert de ta fonction ?

    getLasError(LoadLibrary(...)); ???

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Load the addin */
    hModule = LoadLibrary( CopyDest );
    if ( !hModule )
    {
        DWORD err = GetLastError();
        printf( "Could not load addin module \"%s\" : error %d\n", CopyDest, err );
    }
    Voir aussi la fonction FormatMessage(), qui permet d'obtenir une chaîne expliquant l'erreur.
    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.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    alors voilà j'ai utilisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* Load the addin */
    hModule = LoadLibrary( CopyDest );
    if ( !hModule )
    {
         DWORD err = GetLastError();
         printf( "Could not load addin module \"%s\" : error %d\n", CopyDest, err );
         DisplayLastError();
    }
    avec cette fonction pour me dire ce qu'est l'erreur :
    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
    void DisplayLastError()
    {
    	LPVOID lpMsgBuf = 0;
    	DWORD dwErr = GetLastError();
    	if(dwErr) {
    		FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
    		NULL, dwErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
    		(LPTSTR) &lpMsgBuf, 0, NULL);
    		if(lpMsgBuf) {
    			printf("error : %s\n",(LPCTSTR)lpMsgBuf);
    			LocalFree(lpMsgBuf);
    		}
    	}
    }
    et ça me met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Could not load addin module "c:\WINDOWS\system32\bsp.dll" : error 1114
    error : Une routine d'initialisation d'une librairie dynamique (DLL) a échoué.
    quelqu'un sait comment je fixe ça ?

  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
    Ça veut dire que le DllMain() de ta DLL, ou d'une DLL chargée par celle-ci, a retourné FALSE.

    De plus, n'appelle pas GetLastError() dans ta seconde fonction, utilise plutôt ceci:
    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
    #include <stdio.h>
    #include <tchar.h>
    
    void DisplayError(DWORD dwErr)
    {
    	LPCTSTR lpMsgBuf = NULL;
    	if(dwErr) {
    		FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
    		NULL, dwErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
    		(LPTSTR) &lpMsgBuf, 0, NULL);
    		if(lpMsgBuf != NULL) {
    			_tprintf(_T("error : %s\n"), lpMsgBuf);
    			LocalFree(lpMsgBuf);
    		}
    	}
    }
    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 régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    ok, pour ce qui est de mon problème je suis pause que sans accès au source des DLL, je pense que je suis foutu non ?
    cela peut-il venir du fait que mes DLL soit corrompues peut-être??

  9. #9
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par ArnaudDev Voir le message
    ok, pour ce qui est de mon problème je suis pause que sans accès au source des DLL, je pense que je suis foutu non ?
    cela peut-il venir du fait que mes DLL soit corrompues peut-être??
    C'est sûr que avoir accès aux sources de la DLL permettrait de comprendre un peu mieux ton problème.

    Au fait, c'est quoi cette DLL, elle provient de quel produit/package ?

    Quelques pistes :

    - Dll corrompue (j'y croie pas trop car elle se charge mais bon)
    - Problème de droits sur une ressource utilisée par la DLL
    - Clé de registre non déclarée pour l'utilisateur courant
    - DLL non enregistrée par regsvr32
    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
    .

  10. #10
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    c'est une dll venant d'un lecteur d'empreinte, je voudrais utiliser ce lecteur avec une interface à l'aide de son BSP.
    et c'est son BSP justement cette DLL :p
    BSP : Biometric Service Provider

  11. #11
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    - DLL non enregistrée par regsvr32
    Comment on fait ça ?

  12. #12
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par ArnaudDev Voir le message
    Comment on fait ça ?
    démarrer/exécuter et taper : regsvr32 <chemin complet de la dll>

    regsvr32 permet d'enregistrer ou de supprimer l'enregistrement d'un composant OLE/COM. Ceci n'a de sens que pour les DLL qui nécessitent un enregistrement ce que je ne sais pas dans le cas de ta DLL
    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
    .

  13. #13
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    j'ai essayer et il ma dit que le point d'entrée DllRegisterServer est introuvable, et que le fichier ne peut être chargé :S

  14. #14
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Alors, ce n'est pas une DLL qui doit être enregistrée, mauvaise piste, pioche une autre carte
    Tu as de la doc ssur l'utilisation de ta DLL ?
    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
    .

  15. #15
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 126
    Points : 91
    Points
    91
    Par défaut
    lol encore un problème, justement la doc c'est un fichier pdf qui est corrompu je peux donc pas l'ouvrir, vraiment pas de bol quoi :S

  16. #16
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Ca va pas être simple d'utiliser une DLL sans la doc de cette DLL
    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
    .

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

Discussions similaires

  1. [JNA] Problème de chargement de librairie
    Par krapo13 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 16/06/2011, 09h23
  2. Servlet Tomcat problème chargement librairie
    Par Vlacar dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 05/05/2010, 13h23
  3. Réponses: 1
    Dernier message: 25/03/2010, 13h00
  4. [Débutant] Problème de chargement de librairie
    Par La Fée Dragée dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/07/2009, 17h06
  5. [JNI]problème de chargement de librairie.
    Par brasinamical dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 14/04/2009, 13h47

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