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 :

LoadLibrary / Erreur chargement sur mysqlpp::Connection


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 74
    Points : 65
    Points
    65
    Par défaut LoadLibrary / Erreur chargement sur mysqlpp::Connection
    Bonjour,

    J'ai une dll avec une seule fonction et le code suivant :
    mysqlpp::Connection *pConnection; // connection to mySQL
    pConnection = new mysqlpp::Connection;

    J'ai un exécutable avec le code suivant :
    HINSTANCE hLib;
    hLib = LoadLibrary("maDll.dll");

    A l'exécution, le LoadLibrary retourne 0 (erreur de chargement).
    Si je met en commentaire uniquement la ligne du new, le LoadLibrary fonctionne.
    Il n'y a aucun autre code, c'est seulement le new qui fait tout bloquer.

    Quelqu'un peut m'aider ?

  2. #2
    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
    <snip une connerie>

    Regarde le résultat de GetLastError() quand LoadLibrary() échoue (tu peux utiliser FormatMEssage().
    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.

  3. #3
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 74
    Points : 65
    Points
    65
    Par défaut
    Le résultat de l'erreur est 998 (L'accès à cet emplacement de la mémoire n'est pas valide.) Cette erreur vient normalement lorsque la dll est mal compilée ou linkée. Lorsque le système ne trouve pas l'erreur, il y a un autre message.
    Je voudrais préciser que j'utilise Eclipse et gcc/g++. Est ce que ça peut-être des options de linkage ?

  4. #4
    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
    En clair, ERROR_NOACCESS (différent de ERROR_ACCESS_DENIED).

    Peut-tu montrer le code de ta DLL ? J'aimerais savoir où est faite ton instanciation...
    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.

  5. #5
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 74
    Points : 65
    Points
    65
    Par défaut
    Dll1.h
    #ifndef DLL1_H_
    #define DLL1_H_

    #include <mysql++.h>
    using namespace mysqlpp;

    int doubler (int x);

    #endif /*DLL1_H_*/

    Dll1.cpp
    #include "Dll1.h"

    int doubler (int x)
    {
    mysqlpp::Connection *pConnection;
    pConnection = new mysqlpp::Connection;

    return (x * 2);
    }


    Programme exécutable
    #include <windows.h>
    #include <iostream.h>

    int main ()
    {
    HINSTANCE hLib; // Dll library handler
    cout << "Avant : " << hLib << endl;
    hLib = LoadLibrary("aa_Dll1.dll");
    cout << "Après" << hLib << endl;

    return 1;
    }


    Il s'agit d'un tout petit exemple, juste pour tester le LoadLibrary. Il n'est pas possible de l'exécuter en l'état si tu n'as pas les fichiers mysql++ (c'est très gros).

  6. #6
    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
    Qu'utilises-tu pour indiquer que la DLL exporte la fonction doubler() ?
    Un fichier .def ?
    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 du Club
    Inscrit en
    Août 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 74
    Points : 65
    Points
    65
    Par défaut
    En règle général j'utilise un fichier .lib. Mais je pense qu'il ne s'agit pas du soucis ici puisque je cherche à faire un LoadLibrary. S'il n'y a pas de fonctions exportées, cela n'empêche pas de charger la library mais ensuite sans pouvoir faire quelque chose.

    J'ai utilisé extern "C"

    J'ai utilisé
    #ifdef DLL_EXPORTS
    #define DLL_API __declspec(dllexport)
    #else
    #define DLL_API __declspec(dllimport)
    #endif

    J'obtiens le même résultat.

  8. #8
    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
    Eh bien je suis désolé, je ne connais pas assez mysql.
    Si ça se trouve, l'erreur a lieu au chargement des bibliothèques mysql.
    Tu peux tester ça avec un LoadLibraryEx() et des paramètres exotiques...
    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 du Club
    Inscrit en
    Août 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 74
    Points : 65
    Points
    65
    Par défaut
    Après une longue recherche, j'ai appris que la bibliothèque mysql++ est très sensible sur le chargement en dynamique de ses éléments, qu'il y a plusieurs complications à cela et qu'il fallait jongler avec les paramètres de compilation... sans que je n'y arrive.
    Toujours est-il que de l'avis général, il faudrait mieux mettre une dll intermédiaire qui n'est pas connecté directement aux include de mysql++. C'est c'est que j'ai fait et ça marche.
    Je pensais qu'il s'agissait d'un problème LoadLibrary et donc C/C++, en fait il s'agit d'un problème MySql.
    Merci pour ton aide.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/05/2009, 11h58
  2. Erreur sur une connection de base de donnée
    Par Masmeta dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/03/2008, 13h44
  3. Erreur 145 sur table mysql
    Par ramses83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/09/2007, 21h09
  4. [Conception] Erreur 405 sur formulaire de connection
    Par Deltus dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/07/2006, 15h27
  5. [VB6] Erreur 9 sur redim preserve
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2002, 17h29

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