Transfert instance de classe MySQL à une dll [BC6] - C++ - Programmation
MarshPosté le 03-05-2004 à 21:29:42
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)){
returnfalse;
}
else
returntrue;
}
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, unsignedlong reason, void* lpReserved)
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.
Marsh Posté le 03-05-2004 à 21:29:42
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:
Dans mon programme principal je déclare la fonction d'entrée de la dll:
dans la création de la fenêtre principale:
code qui exécute la fonction de ma dll:
dans ma dll:
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:
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.