Bonjour,
Je suis actuellement en train de créer une dll qui gère la connexion et la communication avec un périphérique USB. Cette dll ne contient que des fonctions, pas de classe, et elle est exploitée par un programme test : une IHM C++/Qt.
Ma "dll" est compilée avec gcc et je mets des extern "C" englobant la déclaration de mes fonctions dans le header le .cpp.
Il se passe quelque chose d'étrange :
Une fonction de la dll provoque un comportement étrange : Son appel depuis l'IHM semble déplacer la mémoire réservée à l'IHM. Je veux dire par la que l'IHM est composée d'une classe simple qui contient des attributs. Une fois l'appel de fonction réalisé, tous les attributs de la classe prennent une valeur aléatoire, tandis que les variables globales ou locales n'appartenant pas à la classe ne sont pas modifiées. C'est même valable pour la valeur prise par un slider et retournée par : slider.value();
Je ne comprends pas. Evidemment cela fait planter mon appli.
IHM:DLL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part myfunction(class_attribute)Ceci affiche un nombre "aléatoire"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void myfunction(float value) { puts(value); }
le même affichage après l'appel de fonction dans l'IHM affiche également un nombre aléatoire.
Quelqu'un a soumis l'hypothèse selon laquelle le problème pouvait venir du caractère dynamique de la librairie qui est utilisée tel un objet dynamique. Qu'en pensez vous ? La plupart des fonctions marche et un programme simple sans IHM semble fonctionner.
Partager