[Résolu] Impossible de démarrer l'extension

Bonjour 4ian,

Mon extension ne démarre plus : GD affiche le message “Impossible de démarrer l’extension”.
Le compilateur ne me précise aucune erreur, si ce n’est quelques WARNINGS.
J’ai essayer d’isoler le problème : il vient de la fonction ArrayShowerObject::Draw() où j’appelle une fonction qui me calcule la taille des colonnes de mon objet “Afficheur de tableaux”.
Le pire, c’est que cette fonction n’est pas appelée dans Draw(), car je l’ai mise en commentaire).

J’ai isolé précisément le morceau où ça bug :

sf::Text text;

C’est une simple déclaration d’un sf::Text.

La fonction complète est :

[code]

//Les includes du fichier
#include “ArrayShowerObject.h”
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
#include “GDL/Object.h”

#include “GDL/ImageManager.h”
#include “GDL/FontManager.h”
#include “GDL/Position.h”
#include “GDL/tinyxml.h”

#include “ArrayConverter.h” // Fonctions statiques pour convertir des string en double et inversement
#include “ArrayContent.h” // Singleton qui gère les tableaux

#if defined(GD_IDE_ONLY)
#include <wx/wx.h>
#include “GDL/CommonTools.h”
#include “GDL/MainEditorCommand.h”
#include “ArrayShowerObjectEditor.h”
#include “ArrayShowerInitialPositionPanel.h”
#endif

//Un typedef
typedef std::vectorstd::string stringVector;

void ArrayShowerObject::GenerateColumnsSize(sf::RenderWindow& main_window)
{
columnsSize.clear();

if(GetArrayToShowType() == Array2DText)
{
    //actualScene est un pointeur vers la scene actuelle que je met depuis LoadRessources.
    std::vector<stringVector> *arrayPtr = &(ArrayManager::getInstance()->d2ArraysStrings[actualScene->game][arrayToShowName]);

    int a;
    for(a = 0; a < GetColumns(); a++)
    {
        if(arrayPtr->size() > a + 1)
            break;

        int columnMaxSize = 0;

        int b;
        for(b = 0; b < GetRows(); b++)
        {
            if(arrayPtr->at(a).size() > b + 1)
                break;

            sf::Text text;
            text.SetString(arrayPtr->at(a).at(b));

            if(text.GetRect().Width > columnMaxSize)
                columnMaxSize = text.GetRect().Width;
        }

        columnsSize.push_back(columnMaxSize);
    }
}

}[/code]

EDIT : Ca bug dès que j’appelle qqch qui est dans la SFML.
Si je tente de créer un sf::Shape, ça bug aussi par exemple…
C’est un problème de linkage ?

j’ai trouvé le problème, il vient du SDK, enfin plutôt d’un manque d’explications.

Vu que mon extension a besoin de SFML, il va chercher sfml-graphics-2.dll, or il existe pas, il y a seulement sfml-graphics.dll.
Il suffit de dupliquer les dlls de SFML en ajoutant “-2” et ça démarre.

Modifie les options de ton projet pour que ça linke avec les mêmes DLLs que celles de GD.
Je vais ajouter l’affichage du message d’erreur renvoyé lors du chargement de l’extension pour éviter de trop chercher la prochaine fois.

Ca serait pas mal, parce que j’ai passé toute la matinée à chercher…

J’ai ajouté ça, et à part le fait que la façon de coder avec l’API windows est tout à fait dé-geu-la-sse, le message d’erreur renvoyé par Windows n’est pas non plus ultra explicite. Par exemple, si je retire une dll de l’extension Objet Vidéo, ça me dit juste que “Erreur (126) : Le module spécifié est introuvable”.
Mais bon, ce sera mieux que rien. ( Le message d’erreur sous Linux et Mac est mieux, ça dit précisément ce qu’il manque, ce qui facilite la recherche )

Tu arrive à utiliser les mêmes DLLs que celles de GD au fait ou pas ?

J’ai pas encore essayer de changer le linkage.
Faut que je fasse quoi exactement sur le linker ?

Copie ici les options de linkage déjà pour voir.

Link libraries :

opengl glu32 C:\Libs\SFML\bin-mingw-release\lib\libsfml-audio.a C:\Libs\SFML\bin-mingw-release\lib\libsfml-graphics.a C:\Libs\SFML\bin-mingw-release\lib\libsfml-main.a C:\Libs\SFML\bin-mingw-release\lib\libsfml-network.a C:\Libs\SFML\bin-mingw-release\lib\libsfml-system.a C:\Libs\SFML\bin-mingw-release\lib\libsfml-window.a

Other linker options :

-lgdl.dll -lwxmsw29_xrc -lwxmsw29_richtext -lwxmsw29_ribbon -lwxmsw29_aui -lwxmsw29_adv -lwxmsw29_html -lwxmsw29_core -lwxbase29_xml -lwxbase29_net -lwxexpat -lwxbase29 -lwxpng -lwxjpeg -lwxzlib -lwxtiff -lkernel32 -luser32 -lopengl32 -limm32 -lcomctl32 -lglu32 -lws2_32 -lgdi32 -lwinmm -luuid -lshell32 -lole32 -lwinspool -ladvapi32 -lcomdlg32 -loleaut32

J’avais mis SFML directement dans link libraries parce qu’il me les trouve pas sinon. :wink:
(C’est le release - edittime)

[size=150]EDIT : C’est corrigé, j’ai mis le chemin de GD dans les chemin du linker, et j’ai remis les -lsfml à la place des lib .a et ça marche.[/size]