Plantage de gravure DVD avec Nero SDK

Signaler
Messages postés
13
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
5 novembre 2004
-
Messages postés
9
Date d'inscription
lundi 30 avril 2007
Statut
Membre
Dernière intervention
16 mai 2009
-
Bonjour à tous,

j'essaye de mettre au point un programme en VB6 qui permet de graver un fichier sur un DVD+RW. Je veux que le soft test si le DVD+RW est vierge, si il ne l'est pas il le formate, puis il grave sur le DVD+RW vierge.
Pour cela j'ai choisi d'utiliser la SDK de Nero car je possède une version OEM de Nero fournie avec mon graveur de DVD.

Lorsque je tente de graver sur un DVD+RW vierge, aucun problème, la gravure fonctionne.
Lorsque je tente de formater un DVD+RW, aucun problème.
Par contre lorsque je veux graver sur le DVD+RW juste après l'avoir formater, mon appli plante royalement (parfois je reussi a graver et parfois l'appli plante, ce n'est pas systématique....)

Je ne sais vraiment pas quoi faire...
Quelqu'un a-t-il deja eu ce type de probleme ?
Je peux vous donner mon code si nécessaire.
Je dois préciser que ce code, sur une autre machine, genere avant tout une erreur du type (je n'ai pas le message sous les yeux) : "une opération asynchrone est deja en cours...." lorsque je tente de formater un DVD+RW....

Merci beaucoup d'avance...
_________
###KRAMP

5 réponses

Messages postés
308
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
23 mars 2010

Envoie ton code ont y vera déjà plus clair ... Sinon comment cela se fait il tu as dit que dès fois ca marche et dès fois non?? C'est chelou. :question)
C'est rapide net et sans douleur...
Messages postés
13
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
5 novembre 2004

voici enfin mon code...je suis désolé de ne pas l'avoir posté avant mais j'étais absent.

'###DECLARATIONS
Public WithEvents Nero As Nero
Public WithEvents Graveur As NeroDrive

Private tmpSaveFile As String
Private saveFile As String

'### FONCTIONS DE GRAVURE

'###FONCTIONS DE GRAVURE
Sub burnData()
    'Gestion des erreurs
    On Error GoTo gestionErreur

    'Lors du lancement de la gravure des donnees, on...

    '...initialise NERO
    '==================
        '...cree un objet Nero
        Set Nero = New Nero

        Dim Lecteurs As NeroDrives
        '...recupere la liste des graveurs de DVD+RW de l'ordi
        Set Lecteurs = Nero.GetDrives(NERO_MEDIA_DVD_P_RW)

        Dim i As Integer
        '...selectionne le graveur qui supporte les RW
        For i = 0 To Lecteurs.Count - 1
            If Lecteurs(i).DevType = NERO_SCSI_DEVTYPE_WORM Then Exit For
        Next
        Set Graveur = Lecteurs(i)

        '...initialise le repertoire des donnees du cd
        Dim cdFolder As NeroFolder
        Set cdFolder = New NeroFolder

        '....initialise la piste ISO
        Dim pisteISO As NeroISOTrack
        Set pisteISO = New NeroISOTrack
        pisteISO.RootFolder = cdFolder

    '...test si il y a plusieurs disques
    '=======================================
        'Si il n'y a qu'un seul disque a graver, on...
        '...initialise le numero du disque
        discNum = 1
        '...indique l'etat
        saveForm.setState BurnDVD
        '...le met dans le nero iso track
        Dim fichierNero As NeroFile
        Set fichierNero = New NeroFile
        cdFolder.Files.Add fichierNero
        fichierNero.name = tmpSaveFile
        fichierNero.SourceFilePath = "D:" & fichierNero.name
        '...initialise le nom de la piste iso
        pisteISO.name = "ASP63_" & Format(Now, "yyyy-mm-dd")

    '...initialise la gravure
    '========================
    '...options de gravure de la piste ISO : system de fichier iso + joliet
    pisteISO.BurnOptions = NERO_BURN_OPTION_CREATE_ISO_FS + NERO_BURN_OPTION_USE_JOLIET

    '...lancement de la gravure
    Graveur.BurnIsoAudioCD "", "", False, pisteISO, Nothing, Nothing, _
                           NERO_BURN_FLAG_BUF_UNDERRUN_PROT + _
                           NERO_BURN_FLAG_DETECT_NON_EMPTY_CDRW + _
                           NERO_BURN_FLAG_WRITE, 0, NERO_MEDIA_DVD_P_RW

    Exit Sub

gestionErreur:
    'En cas d'erreur avec nero
    Nero.Abort
    MsgBox "Erreur lors du lancement de la gravure de la sauvegarde.", vbCritical + vbOKOnly, 
End Sub

Sub eraseDisc()
    'Pour effacer un disque, on...
    '...indique l'etat
    saveForm.setState EraseDVD
    '...l'efface
    Graveur.eraseDisc True, NERO_ERASE_MODE_DEFAULT
End Sub

'#EVENEMENTS
 '#GRAVEUR
Private Sub Graveur_OnDoneErase(ok As Boolean)
    'Lorsque l'effacage est termine, on...
    '...test si il a ete correctement termine
    If ok Then
        'Si termine correctement, on...
        '...ejecte le CD
            'Graveur.EjectCD
        '...recharge le CD
            'Graveur.LoadCD
        '...lance la gravure
        If nbDisc = 1 Then
            burnData False
        ElseIf nbDisc > 1 Then
            burnData True
        End If
    ElseIf Not ok Then
        'Si termine non correctement, on...
        '...annule la gravure
        Nero.Abort
        '...ferme la fenetre
        saveForm.closeIt
        '...affiche un message
        MsgBox "Erreur lors de l'effacage du disque.", vbCritical + vbOKOnly
    End If
End Sub

 '#NERO
Private Sub Graveur_OnDoneBurn(StatusCode As NEROLib.NERO_BURN_ERROR)
    'Lorsque la gravure est terminee, on...
    '...test comment elle s'est terminee
    Select Case StatusCode
        Case NERO_BURN_OK 'Avec succes !
                'Si il n'y a qu'un disque, on...
                '...ferme la fenetre
                saveForm.closeIt
                '...indique que la gravure s'est termine avec succes
                MsgBox "La sauvegarde est terminée.", vbInformation + vbOKOnly
        Case Else
    End Select
End Sub

Private Sub nero_OnNonEmptyCDRW(Response As NEROLib.NERO_RESPONSE)
    'Si le disque n'est pas vierge, on...
    '...annule la gravure
    'Nero.Abort
    '...efface le cd
    saveForm.eraseDisc
End Sub


Ce code fonctionne "parfois" (ce qui est tout simplement incroyable !!!).
Dans la plupart des cas :
-si le DVD+RW est vierge, la gravure se lance directement et fonctionne,
-si le DVD+RW n'est pas vierge, le formatage est lancé et fonctionne corretement, lors du passage a l'etape suivante, l'application (ou VB6 en non compilé) plante sauvagement !
Toutefois, de temps en temps, le formatage plus gravure fonctionne (je crois que c'est lors de la premiere tentative suivant un redémarrage de la machine, je me suis donc dit que le processus imapi.exe se terminait mal, j'ai donc rajouté du code pour le tuer mais cela ne change rien...)

Quelqu'un connait-il la solution ?
_________
###KRAMP
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
J'arrive un peu tard mais je tombe la dessus par hasard.

Set Nero = New Nero
Set Lecteurs = Nero.GetDrives(NERO_MEDIA_DVD_P_RW
Set Graveur = Lecteurs(i)
Set cdFolder = New NeroFolder
Set pisteISO = New NeroISOTrack
Set fichierNero = New NeroFile

Je ne vois nul part de :

Set Nero = Nothing
Set Lecteurs = Nothing
Set Graveur = Nothing
Set cdFolder = Nothing
Set pisteISO = Nothing
Set fichierNero = Nothing

Bonne prog
++
Messages postés
30
Date d'inscription
lundi 9 octobre 2000
Statut
Membre
Dernière intervention
16 février 2010

J'ai exploré un peu la source exemple fournie dans le SDK de Nero,
Il semble que la ligne :
    Set Lecteurs = Nero.GetDrives(NERO_MEDIA_DVD_P_RW)
fasse planter le programme lors de la deuxieme execution dans le programme,
il doit falloir decharger l'objet lecteurs et nero d'une maniere ou d'une autre,
en tout cas, j'ai essayé les :
    Set Nero = Nothing
    Set Lecteurs = Nothing
mais rien a faire, le programme plante quand meme
Si quelqu'un a une idée pour faire avancer le Schmilblick... elle sear bien venue.

A++
AdCr
Messages postés
9
Date d'inscription
lundi 30 avril 2007
Statut
Membre
Dernière intervention
16 mai 2009

Salut tous ,je m'appel clamou et je suis un etudient a l'ENSI en tunis .j'aim vous mes aider a bien comprendre pleussieur notion.