Accueil > Forum > > > > GetWindowLong, cast & méthodes virtuelles
GetWindowLong, cast & méthodes virtuelles
jeudi 1 juin 2006 à 20:51:02 |
GetWindowLong, cast & méthodes virtuelles

MyXiLo
|
Bonsoir, Mon soucis est que, lorsque je cast le resultat d'un GetWindowLong en un pointeur, l'appel d'une fonction virtuelle de l'objet pointe provoque une erreur lors de l'execution (" Unhandled exception at 0x0040149c in Ivy.exe: 0xC0000005: Access violation reading location 0x00000000.", avec VS 2005). class MaClasse { virtual void MaFonction(); }
static LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { MaClasse *MonObjet=(MaClasse *)GetWindowLong(hwnd, GWL_USERDATA); MonObjet->MaFonction(); // Genere une erreur si MaFonction est déclarée virtual }
(Je precise que ma WindowProcedure est bien definie pour une WNDCLASSEX appartenant à MaClasse(dans cet exemple)).
Ce serait une erreur de debutant que ca n'aurait rien d'etonnant puisque j'en suis un :}.
Merci d'avance. Thomas.
|
|
jeudi 1 juin 2006 à 20:56:13 |
Re : GetWindowLong, cast & méthodes virtuelles

vecchio56
|
J'ai déja eu ce problème. Au moment du SetWindowLong, il faut que tu castes en (MaClasse*) (j'imagine que le vrai type de l'objet n'est pas MaClasse, mais un sous-type de MaClasse)
|
|
jeudi 1 juin 2006 à 21:04:08 |
Re : GetWindowLong, cast & méthodes virtuelles

MyXiLo
|
Je cast deja en (MaClasse *) au moment du SetWindowLong en realite. Effectivement c'est un sous-type, mais, meme si MaClasse n'est pas derivee, ca pose tout de meme un probleme.
Merci pour cette reponse tres rapide.
|
|
jeudi 1 juin 2006 à 21:08:20 |
Re : GetWindowLong, cast & méthodes virtuelles

vecchio56
|
Réponse acceptée !
C'est plutot bizarre ca... Pour tester, tu peux essayer ca:
MaClasse* o1 = new ...; LPARAM l = (LPARAM)o1; MaClasse* o2 = (MaClasse)l; o2->MaFonction();
Au pire, compare les adresse des objets de départ (au moment du SetWindowLong) et à l'arrivée (GetWindowLong). Je suppose qu'ils seront différents (c'est comme ca que j'avais détecté le problème quand je l'avais eu)
|
|
jeudi 1 juin 2006 à 21:34:03 |
Re : GetWindowLong, cast & méthodes virtuelles

Zootella
|
Si le retour de GetWindowLong est NULL, c'est logique que ça plante.
Test l'objet avant de l'utiliser.
|
|
jeudi 1 juin 2006 à 21:35:43 |
Re : GetWindowLong, cast & méthodes virtuelles

vecchio56
|
Apparemment ca plante seulement quand la méthode est virtuelle
|
|
jeudi 1 juin 2006 à 22:41:32 |
Re : GetWindowLong, cast & méthodes virtuelles

MyXiLo
|
En fin de compte je viens de me rendre compte que c'est mon SetWindowLong qui ne fonctionnait pas. Je castais en (long) le pointeur que jobtenais precedement avec GetWindowLong en (MaClasse *). Mais, comme SetWindowLong n'etais pas encore appele au moment du GetWindowLong, cela renvoyait 0, que je passais ensuite a SetWindowLong apres l'avoir caste en (long). Ce qui etait donc tres stupide.
Du coup j'ai mis mon SetWindowLong juste après le CreateWindowEx, en lui passant (long)this en troisieme parametres, et ca marche parfaitement.
C'etait tout a fait idiot comme probleme.
Merci beaucoup pour tes reponses. Thomas.
|
|
jeudi 1 juin 2006 à 22:43:18 |
Re : GetWindowLong, cast & méthodes virtuelles

MyXiLo
|
Oui en revanche ce qui est etrange cest que ca ne marchait pas uniquement pour les fonctions virtuelles...
|
|
jeudi 1 juin 2006 à 23:04:27 |
Re : GetWindowLong, cast & méthodes virtuelles

Zootella
|
Oui en revanche ce qui est etrange cest que ca ne marchait pas uniquement pour les fonctions virtuelles...
C'est logique, tu as appelé MaFonction avec this = NULL.
On peut appeler les fonctions d'une classe avec un pointeur NULL, seulement la classe ne doit pas avoir de variables membres.
Or pour gérer les fonctions virtuelles, le compliteur rajoute une variable membre caché, un pointeur sur la table virtuelle.
Quand tu appele MaFonction, ce pointeur est déréférencé, donc plantage.
|
|
vendredi 2 juin 2006 à 00:00:48 |
Re : GetWindowLong, cast & méthodes virtuelles

MyXiLo
|
Merci beaucoup pour cette precision. Thomas.
|
|
Cette discussion est classée dans : erreur, cast, mafonction, maclasse, getwindowlong
Répondre à ce message
Sujets en rapport avec ce message
[VS.NET] Une erreur de compilation incroyable! [ par Sunsawe ]
Bonjour, excusez moi mais je ne savais pas comment titrer mon message autrement. Voilà là fameuse erreur qui se suffit à elle même: Mesfunc.cpp(72) :
cast c++ [ par mnaulet ]
Bonjour,Est-il possible de supprimer les erreurs du compilateur sur les cast en c++.J'ai l'erreur suivante lors de l'appel à la fonction suivante :get
cast... [ par elpens ]
Bonjour,J'ai un souci de casting avec la fonction createProcess(...)J'ai un path en System:String, qui ne passe pas dans la fonction.J'ai également te
Erreur de LNK2001 [ par bikini42 ]
Bonjour à tous,J'ai un souci qui me bloque totalement, il concerne une erreur de compilation LNK2001 : unresolved external symbol Je ne vois pas comme
Probleme de compilation GCC please HELP :( [ par Booster ]
Bonjour à tous,Alors voilà j'ai le code suivant :cprodconso.h http://cpp.tastethepaste.org/1019cprodconso.cpp<a title
Erreur de syntaxe C++ [ par hisoka7 ]
Bonjour, J'ai une erreur de syntaxe (voir commentaire ci-dessous). Est ce quelqu'un peut m'expliquer pourquoi?
Blocage complet des Socket et autre E/S ..? [ par pdc_666 ]
Bonjour à tous,j'ai un gros soucis dans un programme que j'ai créé pour ma société. Pour faire simple c'est un Standard téléphonique à reconnaissance
Erreur [ par buguetj ]
Bonjour, je suis sous le développement d'une application C++ en interface MS-DOS (standard).J'ai tapé ceci: char choix1; while (cin>>choix1="
Récupération de l? erreur d?Internet Explorer (404) [ par Armandopoulos ]
Salut à tous, J´utilise cette fonction Navigate2 dans mon code pour charger une page html <b class="s1" style="fo
Erreur C1093 [ par fuego2002 ]
je suis entrain de travailler sur un logiciel de restauration rapide, je mon code marchait superbien sur un ordinateur, quand je l'ai copié sur un aut
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|