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

Qt Discussion :

[QPluginLoader] L'application a cessé de fonctionner


Sujet :

Qt

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut [QPluginLoader] L'application a cessé de fonctionner
    Bonjour,

    je tente actuellement de faire une application basée sur les plugins, et j'ai quelques problèmes avec le loader.

    J'ai créé mon plugin (.dll) et je l'ai placé dans un sous-répertoire de l'application.

    Voici ce que je tente de faire :

    Code qt : 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
    17
    18
    19
    20
    21
    QList<Plugin *> LoadWindow::load ()
    {
    	QList<Plugin *> plugins;
    	QDir plugDir (plugDir.absolutePath() + "/bin");
     
    	count = plugDir.entryList(QDir::Files).count();
    	if (count == 0)
    		return QList<Plugin *>();
     
    	foreach(QString file, plugDir.entryList(QDir::Files))
    	{
    		QPluginLoader loader(plugDir.absoluteFilePath(file));
    		if(QObject * plugin = loader.instance())
    		{
    			Plugin * new_plugin = qobject_cast<Plugin *>(plugin);
    			new_plugin->setName(file);
    			plugins.push_back(new_plugin);
    		}
    	}
    	return plugins;
    }

    Mais lorsque j'atteins la ligne 12 pour créer mon QPluginLoader, le programme s'arrête.

    Qu'est-ce qui pourrait être à l'origine de ce phénomène ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Par défaut
    lu,

    quelques remarques en vrac :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    count = plugDir.entryList(QDir::Files).count();
    ...
    foreach(QString file, plugDir.entryList(QDir::Files))
    Tu fais 2 fois appels à une fonction dont le retour est le même. Essaie de factoriser.
    Tu utilises foreach (QString file) alors que foreach (const QString & file) marche.
    Ca évite une création de la couteuse QString dans chaque passage.

    Sous Windows tes plugins sont des .dlls, sous X11 ce sont des .so.
    Filtre donc tes plugins via ton entrylist avec, sous Windows, un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QFileInfoList pluginInfoList = pluginDirectory.entryInfoList(QStringList() << "*.dll", QDir::Files | QDir::NoDotAndDotDot);
    Tu noteras l'emploi du flag QDir::NoDotAndDotDot pour éviter les répertoires . et ..

    Voilà, en filtrant un peu les plugins que tu vas charger, je pense que ton instanceloader va mieux apprécier.

    Dernier point, je ne saurai trop te conseiller la lecture d'articles sur la présentation des plugins Eclipse. Et voir comment ils ont organisé les répertoires, la présence d'un manifest décrivant le plugin, la gestion des contraintes inter plugins...

    Bonne lecture !

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    Merci pour toutes ces infos, elles me sont utiles.

    Problème résolu : je tentais d'utiliser une fonction de mon Plugin* alors que c'est un objet abstrait ...

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/08/2011, 10h09
  2. Mon application cesse de fonctionner
    Par ADBows dans le forum VB.NET
    Réponses: 16
    Dernier message: 15/07/2011, 01h24
  3. ''explorateur exe a cessé de fonctionner ''
    Par bibiou dans le forum Windows Vista
    Réponses: 6
    Dernier message: 05/07/2008, 15h16
  4. explorateur windows a cessé de fonctionner
    Par jeanmorel dans le forum Windows Vista
    Réponses: 3
    Dernier message: 09/07/2007, 21h02
  5. [D7] Appli qui "a cessé de fonctionner" sous certains Vista
    Par david_chardonnet dans le forum Delphi
    Réponses: 2
    Dernier message: 03/07/2007, 15h59

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