Un problème bizarre

Sujets variés concernant le développement en PureBasic
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Un problème bizarre

Message par Polo »

Salut !
J'ai un problème bizarre, je vais essayer de vous expliquer ça :
J'ai créé une userlib avec une fonction.
ça marche très bien quand je fais :

Code : Tout sélectionner

code.....
mafonction()
code...
par contre quand je fais ça, ça plante sans dire pourquoi :?

Code : Tout sélectionner

code....
Procedure test()
  mafonction()
endprocedure
test()
code...
Comme vous pouvez le voir, la seule différence, c'est qu'au début j'appelle la fonction normalement, et dans le deuxième test je l'appelle dans une procédure (et dans cette procédure il n'y a que l'appel de la fonction).
Alors, comme ça revient au même, je me demande quand même pourquoi ça marche pas :oops:
Je sais, ça peut être plus éclairant si je postait le code, mais je ne le poste pas ;)
En tout cas ça m'embête bien ce truc...
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

ça doit venir de ta userlib 8O
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Pas possible :lol:
Je m'en doute, que ça vient de ma lib, mais pourquoi ça marche en dehors d'une procédure et pas à l'intérieur :?
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

sans code..difficile. comment as tu déclaré tes procedures (.dll toute ?) utilise tu les threads...? :)
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

J'utilise pas de thread, sinon, pour la déclaration des procédures je vois pas trop de quoi tu parles ?
Et ma lib est faite en C, si ça peux aider :oops:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Peut être un conflit au niveau de la pile (au pif)
mais bon je pourrais pas en dire plus :s

étant donné que l'appel dans une fonction est problèmatique, c'est le seul lien que je vois... mais bon en même temps j'ai pas le niveau pour y voir grand chose ^^

Dri :jesors:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Tu as un message d'erreur ou non de windows ?
Ca plante ou non ? etc

Si c'est une erreur de pile windows le signale. Par contre si tout se ferme sauvagement sans message, là ça craint (peut-être une prière mais je doute :0: ).

Ta procédure utilise des variables locales, globales, une valeur de retour, des paramètres ?

L'appel d'une procedure en PureBasic va sauvegarder les registres ebp, esp, edi, esi, ecx et ebx puis les restaure à la fin. PB initialise toutes les variables locales à 0 dans la procedure et "alloue" de la place sur la pile pour les variables locales et également pour les paramètres car PB réécrit les paramètres sur la pile.

Elle fait quoi ta procedure (je ne pige pas beaucoup le C)
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

ça plante, et j'ai le message qui demande d'envoyer un rapport d'erreur...
Ta procédure utilise des variables locales, globales, une valeur de retour, des paramètres ?
pour les trucs locals/globals je sais pas trop... mais il y a une valeur de retour et des paramètres.
L'appel d'une procedure en PureBasic va sauvegarder les registres ebp, esp, edi, esi, ecx et ebx puis les restaure à la fin. PB initialise toutes les variables locales à 0 dans la procedure et "alloue" de la place sur la pile pour les variables locales et également pour les paramètres car PB réécrit les paramètres sur la pile.
Euh, si tu le dis :lol: Je comprend pas grand chose, là, l'asm et moi...
Elle fait quoi ta procedure (je ne pige pas beaucoup le C)
Beaucoup de trucs :) Non, sérieux, je peux pas vraiment résumer ce qu'elle fait :)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

mets au moins sur le forum le code complet de l'appel de t commande (change de nom si tu veux pas que l'on sache ce que tu fais) et la procedure avec l'appel de la commande de ta librairie avec tous les paramètres et comment tu retournes ton résultat dans les 2 cas
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Euh d'ailleurs, il y a un fichier exp créé dans le répertoire Compilers lors de la compilation, qui ne se supprime pas automatiquement après :? C'est quoi ça encore ?? Pourtant c'est pas une dll que je fais, c'est bien un exe...
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

ben... Je l'ai déjà mis, enfin voila mon code complet :

Celui qui marche

Code : Tout sélectionner

OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget,"Test")

MyFunction(WindowID(0),0,0,400,300,0,0)

Repeat
  EventID.l = WaitWindowEvent()
  
  If EventID = #PB_Event_CloseWindow 
    Quit = 1
  EndIf
  
Until Quit = 1
End
Celui qui marche pas :

Code : Tout sélectionner

OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget,"Test")

Procedure test()
  MyFunction(WindowID(0),0,0,400,300,0,0)
EndProcedure

test()

Repeat
  EventID.l = WaitWindowEvent()
  
  If EventID = #PB_Event_CloseWindow 
    Quit = 1
  EndIf
  
Until Quit = 1
End
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Euh, j'ai trouvé le problème...
C'est tout con, comme d'habitude...
j'avais oublié le _stdcall :?
Je vois pas trop ce que ça change, mais ça marche maintenant :)
Répondre