Bonjour,
J'ai créé un petit programme avec Borland C++ 6 qui contient une petite classe de connexion à MySQL. Je l'utilise dans mon programme principal et ça fonctionne trés bien.
Voulant fragmenter mon programme en plusieurs morceaux pour gérer une éventuelle évolution du programme, j'ai créé une dll qui affiche une fenêtre et qui doit réaliser une requête sur le serveur MySQL en utilisant l'instance de la classe MySQL créée dans mon programme principal.
Voici comment cela se passe:
Ma classe de connexion:
Code :
- class PersoSQL
- {
- private:
- MYSQL *mySQL; // Pointeur MySQL
- char *host,*user,*pass,*db;
- MYSQL_RES *myRES;
- public: // User declarations
- MYSQL_ROW myROW;
- __fastcall PersoSQL()
- {
- this->mySQL = mysql_init(NULL);
- this->host = "localhost";
- this->user = "xxxxx";
- this->pass = "xxxxx";
- this->db = "xxxxx";
- }
- __fastcall ~PersoSQL()
- {
- mysql_close(this->mySQL);
- }
- bool connect()
- {
- if (!mysql_real_connect(this->mySQL, this->host, this->user, this->pass, this->db, 0, NULL, 0)){
- return false;
- }
- else
- return true;
- }
- int isconnect()
- {
- //return((int) this->mySQL);
- return(mysql_ping(this->mySQL));
- }
- MYSQL_RES* query(char *requete)
- {
- if(!mysql_query(this->mySQL, requete)){
- this->myRES = mysql_store_result(this->mySQL);
- if(this->myRES)
- return (this->myRES);
- else
- return NULL;
- }
- else{
- ShowMessage(mysql_error(this->mySQL));
- return NULL;
- }
- }
- };
|
Dans mon programme principal je déclare la fonction d'entrée de la dll:
Code :
- extern "C"__declspec (dllimport) __stdcall int LoadAccueil(PersoSQL);
|
dans la création de la fenêtre principale:
Code :
- perSQL = new PersoSQL; // je crée une instance de ma classe PersoSQL
|
code qui exécute la fonction de ma dll:
Code :
- int a;
- a = LoadAccueil(*perSQL);
|
dans ma dll:
Code :
- #define __WIN__
- #include "mysql.h"
- #include "MySQL_class.h"
- #include "main_config.h"
- PersoSQL *MyConnect;
- extern "C" __declspec(dllexport) __stdcall int LoadAccueil(PersoSQL *SQL);
- #pragma argsused
- int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
- {
- return 1;
- }
- //---------------------------------------------------------------------------
- int __stdcall LoadAccueil(PersoSQL *SQL)
- {
- TConfigForm *ConfigForm;
- MyConnect = SQL;
- ShowMessage(IntToStr(MyConnect->isconnect()));
- return 1;
- }
|
Voilà, en fait donc lorsque je lance la fonction de ma requête, je demande un ping afin de savoir si mon instance de classe a bien été transmise et si je suis toujours connecté au serveur, mais j'ai ce message d'erreur:
Citation :
Access violation at adress 1000D0C4 in module 'LIBMYSQL.DLL'. Read of adress 000000E8
|
J'ai essayé plein de choses mais rien à faire j'ai toujours cette satanée erreur et j'arrive à rien depuis longtemps, je suis bloqué.
Si quelqu'un peu m'aider, ce serait vraiment sympa.
Merci d'avance.