Je débute avec l'assembleur Win32 et ses sympathiques API et pour voir si j'avais bien compris les trucs de bases j'ai voulu créé un programme tout bête qui ouvre une fenètre qu'on peut fermer.
Le Pb c'est que j'a pas dû bien comprendre justement parcequ'il y a manifestement un problème avec mon utilisation de CreateWindow car la valeur retourné dans eax est NULL.
Voici le code que j'ai tapé (je n'ai mis que ce qui concerne la création de la fenètre ; c'est sous RosAsm):
Voilà, si une âme charitable pouvait me dire quelle grossière erreur j'ai commise je lui en serait trés reconnaissant!
Autrement si quelqu'un pouvait m'expliquer brièvement comment récupérer l'erreur de CreateWindow (si c'est l'API GetLastError, je ne vois pas comment il fonctionne, il me renvoi 0 (ou rien?) dans eax quand CreateWindow me renvoie 0) ça serait maxi cool aussi!
Tu as un exemple qui fonctionne avec les tuts de ICZELION traduit en français par MORGATE.
Dans la documentation assembleur tu trouvera les sites.
Si tu ne trouve pas met moi un mail et je te l'enverrai.
__________________________
Si tu n'a pas trouvé la réponse sur MoteurProg...
mais que tu l'as trouvé ailleurs...
Merci de la donner sur MoteurProg.
Moby
Ben justement le truc c'est que c'est à partir du tutorial en question que j'ai essayé de réaliser ce programme, et je me doute bien que si je recopie texto les lignes de ICZELION, ça marchera...
Le problème est justement qu'à partir de ces exemples j'avais CRU comprendre alors qu'en faite non vu que mon code marche pô....
(et soit dit en passant les tutos d'ICZELION sont pour MASM et je programme sur RosAsm, comme précisé plus haut... Mon erreur vient peut-être d'ailleurs d'une mauvaise interpétation du langage MASM)
Si quelqu'un avit la bonté de se pencher sur les 5 lignes de code ci-dessus ce serait cool, même si je sais que ce n'est pas trés amusant... (d'autant plus que je suis sûr que c'est une erreur trés bête mais rien à faire je ne trouve pas, et pourtant j'en ai déjà corrigé un bon paquet, et rien à faire! Bon, en attendant je vais continuer à chercher!)
Nival, comme rémi l'a dit, le problème vient fort probablement d'une erreur dans ta ManinWindowProc. Au moment de la création d'une fenêtre, il y a déjà des messages qui doivent être correctement assumés dans ce CallBack.
Pour les Démos d'Iczelions, ellse sont traduites et disponibles sur la Page [Tutorials] de RosAsm (3eme ligne). D'autres démos sont également disponibles...
Mais, effectivement, la façon la plus simple est de choisir [Files]/[New]/[Ok], pour démarrer avec une base fonctionnelle.
OK merci beaucoup, je ne savais pas que la MainWindowProc était prise en compte dés l'appel de CreateWindow! (elle est effectivement fort légère en l'état...) Je pensais surtout à une erreur dans les paramètres des API et la déclaration de Classe, et autant dire que je commençais à m'arracher les cheveux! Tout semble plus clair maintenant!
Sinon certe il y a des trucs tout fait mais j'ai justement envie de comprendre comment ça marche (et pas d'utiliser des lignes de code déjà faites qui marche sans savoir pourquoi...), c'est pour ça que j'ai essayé par moi-même.
L'intérêt principal des bases n'est pas de "cacher" (au contraire) mais de simplifier le boulot de départ, évidement.
Cependant tu peux les utiliser pour comprendre l'ensemble du mécanisme d'échange des messages (y compris clic droit unfold et tout ré-écrire en bas niveau). Je te conseille aussi de suivre avec le débuggeur, en mode pas-à pas (à l'intérieur ou à l'extérieur des API) pour te rendre compte de ce que tu fais et ce que les API font... Tu peux aussi suivre l'état de tes variables, des divers registres des flags...
Elle est pas belle la vie ?
Les tut de Yeohhs sont aussi un excellent moyen d'apprentissage.