Journal probleme pour créer une librairie/bibliothèque en c++

Posté par  .
Étiquettes : aucune
0
22
juil.
2003
Voilà je veux créer une librarie pour un programme chargent dynamiquement des libraries qu'il trouvent dans un répertoire précis -des plugins pour l'application quoi)
J'utilise Qt pour la faire, mais le problème n'est pas liée à Qt, je n'ai jamais fait de librairie et donc je ne sais pas exactement comment on fait, les rares "docs" que j'ai pu trouver sont plus que légère.
Voici le code de ma librarie -code de test donc plus que léger- il ya un fichier xmlnav.h , un fichier xmlnav.cpp et le makefile généré par qmake, le fichier de project qmake étant généré par qmake lui aussi modifié pour changer le template de app à lib.

xmlnav.h

#ifndef XMLNAV_H
#define XMLNAV_H

#include <qstring.h>

#include <qwidget.h>

class XMLNAV : public QWidget
{
Q_OBJECT
public:
XmlNav();
virtual ~XmlNav();

QString name;
};

#endif

extern QString getName();

--------------
xmlnav.cpp

#include "xmlnav.h"

XmlNav::XmlNav()
: QWidget()
{
name="toto";
}

XmlNav::~XmlNav()
{

};

QString getName()
{
XmlNav xm;
return xm.name;
}

----------
La compilation se passe teés bien sans problème aussi bien sous windows que sous linux.

Le code l'appli chargeant la lib:

typedef QString (*xmlnavLib)();
QDir d("modules");
const QFileInfoList file=d.entryInfoList("*.so *.dll");//pour fonctionnement sous Lnux et Windows
QFileInfoListIterator it(*fil);
QFileInfo *fi;
while((fi=it.current())!=0)
{
QMessageBox::information(0,"info","ok1:" + fi->fileName(),1,0,0);
xmlnavlib xmlnavFunc;

QLibrary xnlib(fi->fileName()); // class Qt chargeant des libraries à la volée
xmlnavFunc=(xmlnavLib) xnlib.resolve("getName");
if(xmlnavFunc)
{
QMessageBox::information(0,"info","ok2",1,0,0);//it's only for test
getName();
}
}
------------------

Le premier QMessageBox est oké avec "xmlnav.so" sous linux ou "xmlnav.dll" sous windows, mais le second QMessageBox n'apparait pas.

Merci d'avance, Blackshack

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.