Problème avec QAXobject et excel
-
Bonjour,
Si je mets dans les membres privés : QAXobject *excel; et dans une méthode: excel = new QAxObject("Excel.Application"); Cela provoque une erreur.
Mais si dans l'intérieur de la méthode je mets QAxObject *excel = new QAxObject("Excel.Application"); alors ça marche.
Ce serait bien pratique car mon objet excel serait défini dans d'autres méthodes.
Il manque peut être quelque chose.
Merci de votre aide. -
Rebonjour,
Voici succintement mon code:class ConnexionExcel
{
public:
ConnexionExcel();void LectureExcel();
private:
QAxObject *excel;};
Ensuite dans le cpp:void ConnexionExcel::LectureExcel()
{
excel = new QAxObject("Excel.Application");
....
}
Le programme plante et j'ai : AppliExcel.exe crashed.Si en revanche je fais :
void ConnexionExcel::LectureExcel()
{
QAxobject *excel = new QAxObject("Excel.Application");
....
}
Ca marche très bien
Je ne comprends pas du tout d'où ça vient.
Merci de votre aide. -
Bonsoir,
Il faut vérifier tous les usages du pointeur "excel". Le pointeur étant invalide, il y a des chances qu'il soit utilisé avant d'être correctement initialisé.
-
@lacombe said in Problème avec QAXobject et excel:
Ca marche très bien
Je ne comprends pas du tout d'où ça vient.
Merci de votre aide.Ce que vous décrivez ici n'a pas de sens, à mon avis vous avez un soucis entre des variables locales et les membres de votre classe.
Personnellement, pour ne pas me mélanger les pinceaux, je défini les membres de mes class toujours avec un 'm' suivit d'une majuscule.
Ensuite, dans le constructeur de préférence toujours initialiser les membres de la classe:
Et enfin, dans le destructeur, ne pas oublier de libérer la mémoire allouée.
Ce qui donnerai dans votre cas:class ConnexionExcel { public: ConnexionExcel(): mExcel(new QAxObject ("Excel.Application")) {} ~ConnexionExcel() { mExcel->deleteLater(); } void LectureExcel(); private: QAxObject *mExcel; };
-
Parfait !
Il ne reste plus qu'à marquer la discussion comme résolue pour que les autres membres du forum sachent qu'une solution a été trouvée.