Arf, ton erreur est toute bête: tu utilises:
if(HeapGetLock(h))
sans avoir initialisé h!
Et le pire est que si tu déclarais h comme variable locale (comme il faut faire si on programme proprement!), GCC t'aurait donné un warning pour ça!
Remplace:
if (!SymPtr) fatal("program not found")
par :
if(!SymPtr || !(h=SymPtr->handle)) fatal("program not found")
et pendant que tu es là, peut on faire un define sur plusieurs lignes, je m'explique:
si je fais :
#define bla(arg) {......................fdsbg...............fbff..........(arg)........................;}
existe il une une commande pour l'écrire sur plrs lignes:
#define bla(arg) {............???
........gddgd...
........(arg)....;}
car quand c'est trop long, v'est ilisible.
Et encore merci.
Watcha @ka JBJ @ka @ngelfire
ICQ: 109631918
#define bla(arg) ({............
........gddgd...
........(arg)....;})
Et il vaut mieux mettre ({...}) plutôt que juste {...} pour que des trucs de style:
if (toto) bla(arg); else ...
passent. (Si tu ne veux pas utiliser d'extensions GNU, tu peux aussi mettre do {...} while(0) à la place de ({...}).)
Kevin Kofler Le 19/09/2002 à 19:58Edité par Kevin Kofler le 19/09/2002 à 19:58 Oui, le } termine déjà l'instruction, donc }; la termine 2 fois et le else ne passe plus!
Et c'est écrit dans la documentation de TIGCC.
SymFindFirst/SymFindNext renvoit un pointeur vers la structure SYM_ENTRY d'un fichier.
Est ce que l'handle du fichier pointé est dans a0 après avoir appellé SymFindFirst/Next ou bien il faut ajouter une valeur au contenu de a0?
Car je n'arrive pas utiliser le contenu de a0 comme handle.
Ou bien j'ai rien compris du tout?
Watcha @ka JBJ @ka @ngelfire
ICQ: 109631918
jackiechan Le 20/09/2002 à 21:25Edité par jackiechan le 20/09/2002 à 21:27 [edit] oups, j'avais pas bien lu la question.
Il faut rajouter 10 octets, je crois, à partir de l'adresse dans a0, et tu auras ton handle (un word).
merci bcp kevin, je retourne a mon programme.
Watcha @ka JBJ @ka @ngelfire
ICQ: 109631918
Entre a0 et 0 (NULL).
move.l ...,dn met les flags CPU en fonction des données déplacées, donc ici en fonction de a0.
Vu qu'on ne peut pas faire tst.l a0 et que cmp.l #0,a0 est lourd (en taille comme en temps d'exécution), c'est la meilleure manière de tester un registre d'adresse.