Interface et pointeur nul

Archive.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Interface et pointeur nul

Message par Dr. Dri »

J'ai failli m'arracher les cheveux en ne comprenant pas le problème... J'ai pu le comprendre avec la version 3.94 qui me sort un
ERROR [invalid memory access]
(la 3.93 se contentait de planter...)

la fonction concernée est tiré de mes fonctions Wave qui sont ici:
http://purebasic.hmt-forum.com/viewtopic.php?t=3123

Code : Tout sélectionner

Procedure PlayWave(*dsw.DirectSoundWave, Looping.l)
  Protected Play.l
  If InitWave() And IsWave(*dsw)
    If Looping
      Looping = #DSBPlay_Looping
    EndIf
    *dsw\Sound\SetCurrentPosition(0)
    *dsw\Sound\Play(0, 0, 0)
    Play = #True
  EndIf
  ProcedureReturn Play
EndProcedure
L'erreur du debugger concerne la ligne
*dsw\Sound\Play(0, 0, 0)
Si on met la ligne précédente en commentaire le problème ne survient pas. Alors j'ai essayé de mettre en évidence le problème à grand renforts de Debug et finalement le pointeur *dsw prend la valeur 0 apres le SetCurrentPosition()

Code : Tout sélectionner

Procedure PlayWave(*dsw.DirectSoundWave, Looping.l)
  Protected Play.l
  If InitWave() And IsWave(*dsw)
    If Looping
      Looping = #DSBPlay_Looping
    EndIf
    Debug *dsw
    *dsw\Sound\SetCurrentPosition(0)
    Debug *dsw
    *dsw\Sound\Play(0, 0, 0)
    Play = #True
  EndIf
  ProcedureReturn Play
EndProcedure
Le problème survient aussi avec la fonction StopWave() et en fait toute fonction qui enchaîne deux appels de méthode. Hors d'une procédure le problème ne survient pas... (problème de pile lié aux appels de méthodes ?)

Dri :!:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Je fais remonter le topic puisque fred est de passage...
aussi faut ke je remette le code à jour dans l'autre topic ^^

Dri
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Effectivement, merci de l'avoir signalé, c'est corrigé.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Par simple curiosité, quel étai le problème exactement ?

Dri
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Quand on utilisait une variable locale structurée avec un champ qui pointait vers une interface, ca ne marchait plsu (decalage de la pile).
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Ah oké, c'est le fait de l'avoir mis dans une structure. En tout cas content d'avoir servi à quelquechose ^^

Dri
Répondre