Page 1 sur 1

Interface et pointeur nul

Publié : mar. 19/juil./2005 12:47
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 :!:

Publié : mar. 02/août/2005 15:40
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

Publié : mar. 02/août/2005 16:39
par Fred
Effectivement, merci de l'avoir signalé, c'est corrigé.

Publié : mar. 02/août/2005 17:13
par Dr. Dri
Par simple curiosité, quel étai le problème exactement ?

Dri

Publié : mar. 02/août/2005 17:46
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).

Publié : mar. 02/août/2005 18:05
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