Il y a eu des changements au niveau par exemple des singletons qui ont leur méthode d’accès/destruction renommées en GetInstance ( avec une majuscule ) et DestroySingleton.
Vous devez également rajouter un define dans les options de votre projet. Dans Code::Blocks, allez dans Project > Build Options, puis onglet #defines et rajoutez :
GD_EXTENSION_API=__declspec(dllexport)
Faites ceci pour chaque cible de compilation. Pour les cibles Linux, rajoutez de la même façon GD_EXTENSION_API="".
Enfin, concernant les futures fonctionnalités C++ de Game Develop, rajoutez GD_EXTENSION_API entre le mot “class” et le nom de la classe de toute les classes que vous souhaitez rendre disponible aux futurs codes C++. Si vous le faites, il faut alors faire de même pour les deux fonctins CreateGDExtension et DestroyGDExtension au minimum.
Regardez par exemple l’extension TextObject pour avoir un aperçu de ces GD_EXTENSION_API.
Je crois avoir changé depuis la dernière version le define GDE, qui se nomme maintenant GD_IDE_ONLY. Toujours dans les options de votre projet, onglet #defines, changez les “GDE” de chaque cible qui en comporte par “GD_IDE_ONLY”.
Comme d’hab, recompilez entièrement vos extensions.
Voilà une version de debug de l’éditeur : compilgames.net/dl/debug1510138.7z
Tu devrais pouvoir compiler ton extension en “Debug - Edittime”, et la placer dans le répertoire Extensions de la version Debug.
Ensuite, lance gdb dessus depuis la ligne de commande ( gdb GDEditor.exe ) ( Puis tape r et appuie sur Entrer pour lancer le programme. Tape bt puis Entrer pour avoir une trace lorsque le crash apparait ).
Tu as bien tout recompilé ?
Tu peux aussi m’envoyer l’extension compilée en Debug - Edittime, je pourrai lancer le debugger dessus de mon coté.
Chez moi, ça plante en effet quand j’ouvre une scène avec l’extension activée.
Avec le debugger, le plantage apparait sur cette ligne de code, au niveau du code du debugger :
if ( extension != boost::shared_ptr<ExtensionBase>() && extension->HasDebuggingProperties() )
Le premier test ne peut être à l’origine du plantage. Donc le pointeur intelligent “extension” est valide quand le deuxième test est effectué. Et ce deuxième test n’est qu’un appel à la fonction HasDebuggingProperties() qui doit renvoyer vrai ou faux. Ça m’étonnerait que ce soit cette fonction qui soit en faute. De plus, la trace de debugger affiche ceci :
Donc ça veut dire qu’on est même pas entré dans la fonction HasDebuggingProperties().
Tu est bien sûr d’avoir effectué une recompilation entière de tout ton projet ? Refait le au cas où, pour toutes les cibles de compilation.
Tu est bien sûr d’utiliser le bon SDK avec la bonne version de GD ?
Le fait que ça plante à l’appel d’une fonction apparue dans le dernier SDK fait vachement penser à une histoire d’incompatibilité/mixage de versions.
Un message d’erreur ? Si tu tape bt, ça affiche quoi ?
J’ai tout bien recompiler, ça plante toujours, sachant que je n’ai pas redéfini la fonction HasDebuggingProperties().
Il faudrait que tu compiles les sources de mon extension pour voir si ça fait pareil chez toi. (par mp)
En regardant le projet, je vois que tu as défini RELEASE et d’autres trucs qui sont liés au cibles release/development dans les defines de la cible Debug - Edittime. Déjà, ça doit pas aider.
Remplace les par les defines des cibles Debug - Edittime que tu peux trouver dans les autres extensions, à savoir :
GD_IDE_ONLY
GD_API=__declspec(dllimport)
GD_EXTENSION_API=__declspec(dllexport)
DEBUG
WINDOWS
SFML_DYNAMIC
wxUSE_UNICODE=0
__WXDEBUG__
WXUSINGDLL
Ensuite, recompile tout et réessaye.
Malgré ça, je n’ai pas eu problème chez moi : J’ai ouvert le projet, tout recompilé, et aucun soucis en Debug ou Release.
Si ça marche toujours pas, tu peux essayer de recompiler une extension simple pour Game Develop, genre AES ou TextObject. Si l’extension recompilée marche, remplace les fichiers par les tiens pour voir ce que ça donne.
Ok, pourtant je n’ai pas touché au défines. Mais j’ai seulement mis un chemin complet pour les libs de la sfml dans le linker car il trouve pas les -lsfml…
Si je me sers de la STL, il y a besoin de linker qqch de spécial ?
J’ai trouvé le problème :
GDL.dll dans le dossier de Game Develop → 6,21 Mo / dernière modification : jeudi 3 mars 2011, 14:59:10
GDL.dll dans le dossier IDE/bin/release → 6,00 Mo / dernière modification : dimanche 26 décembre 2010, 22:50:02
GDL.dll dans le dossier Runtime/bin/release → 3,11 Mo / dernière modification : mercredi 22 décembre 2010, 20:13:40
Si j’ai bien compris, le SDK contient une ancienne version de GDL et de libGDL.a.
En mettant en ligne la nouvelle version, je crois avoir compris le problème.
Vu que j’ai renommé le répertoire du SDK en “GDLSDK”, j’ai oublié de mettre à jour le script qui copie les fichiers : Conclusion, le SDK contenaient des versions plus anciennes des binaires, d’où le problème.