écriture d'un type défini par l'utilisateur dans un fichier

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 - 30 nov. 2003 à 10:59
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 - 30 nov. 2003 à 12:37
Salut,

je cherche à écrire les données d'une structure de type complexe dans un fichier. Mais je bute sur un message d'erreur au moment où je fais le Put#1.

Quelqu'un sait-il à quoi il correspond.

Merci

-----MESSAGE D'ERREUR----------
Opération Get ou Put impossible sur une variable référence d'objet ou une variable définie par l'utilisateur contenant une référence d'objet

-------DEBUT DU CODE------------

Private Type NIVEAU
id As Long ' Identifiant du niveau
nbCols As Long ' Nombre de colonnes
nbRows As Long ' Nombre de lignes
name As String ' Titre ou nom du niveau
startPosX As Long ' Position de démarrage du perso en X
startPosY As Long ' Position de démarrage du perso en Y
type As TYPE_GRAPHIQUE_DU_NIVEAU ' Bibliothèque graphique à charger
backgroundImageURL As String ' Chemin relatif de l'image de fond pour l'affichage du niveau
tableau(50, 30) As Long ' Tableau décrivant le niveau
End Type
Private Enum TYPE_GRAPHIQUE_DU_NIVEAU
CAVERNE = 0
CHATEAU = 1
CIEL = 2
EGYPTE = 3
FORET = 4
JUNGLE = 5
MAISON = 6
MARE = 7
PRAIRIE = 8
End Enum

Sub creerFichier()
Dim s As String
Dim i, j As Long
Dim n As NIVEAU
s = App.Path & "\data"
'donnees bidons pour tester
n.backgroundImageURL = "images\toto.jpg"
n.id = 5
n.name = "le monde de toto"
n.nbCols = 87
n.nbRows = 46
n.startPosX = 76
n.startPosY = 65
For i = 0 To 50
For j = 0 To 30
n.tableau(i, j) = i + j
Next j
Next i
n.type = CHATEAU
' fin des données bidons
Open s For Binary As #1 Len = Len(n)
Put #1, , n ' L'erreur apparaît ici !!!!
Close #1
End Sub

------------FIN DU CODE ---------------

Manu

5 réponses

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
30 nov. 2003 à 11:43
Et bien la solution est simple

remplace

type As TYPE_GRAPHIQUE_DU_NIVEAU

par

iType as Integer

c'est tout !
tout ne pourra plus utiliser l'info express pour
les type de niveau mais au moin ça marchera !

de plus si tu veut lire correctement ton fichier
une fois que tu l'aura ecrit remplace :

name As String
backgroundImageURL As String

par :

name As String * 32
backgroundImageURL As String *256

selon tes besoin agrandi ou rappetiti
les valeurs mais surtout garde les memes
pour toute les version de ton fichier de niveau

@+

E.B.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 nov. 2003 à 11:47
Pour pouvoir enregistrer un type perso, il faut que celui-ci ait une taille fixe.

il faut donc donner un taille aux chaines de caracteres.

de plus, la variable 'Type' etant un Enum, il n'a pas de taille fixe. J'ai donc changé 2-3 trucs dans ton code, qui fonctionne désormais.

Private Type NIVEAU
    id As Long ' Identifiant du niveau
    nbCols As Long ' Nombre de colonnes
    nbRows As Long ' Nombre de lignes
    name As String * 32 ' Titre ou nom du niveau
    startPosX As Long ' Position de démarrage du perso en X
    startPosY As Long ' Position de démarrage du perso en Y
    type As Long ' Bibliothèque graphique à charger
    backgroundImageURL As String * 255 ' Chemin relatif de l'image de fond pour l'affichage du niveau
    tableau(50, 30) As Long ' Tableau décrivant le niveau
End Type

Private Enum TYPE_GRAPHIQUE_DU_NIVEAU
    NIVEAU_CAVERNE = 0
    NIVEAU_CHATEAU
    NIVEAU_CIEL
    NIVEAU_EGYPTE
    NIVEAU_FORET
    NIVEAU_JUNGLE
    NIVEAU_MAISON
    NIVEAU_MARE
    NIVEAU_PRAIRIE
End Enum

Sub creerFichier()
    Dim s As String
    Dim i, j As Long
    Dim n As NIVEAU
    s = "c:\toto.txt" 'App.Path & "\data"
    'donnees bidons pour tester
    With n
        .backgroundImageURL = "images\toto.jpg"
        .id = 5
        .name = "le monde de toto"
        .nbCols = 87
        .nbRows = 46
        .startPosX = 76
        .startPosY = 65
        For i = 0 To 50
            For j = 0 To 30
                .tableau(i, j) = i + j
            Next j
        Next i
        .type = CHATEAU
    End With
    ' fin des données bidons
    Dim Canal As Byte: Canal = FreeFile
    Open s For Binary As #Canal Len = Len(n)
    Put #Canal, , n ' L'erreur apparaît ici !!!!
    Close #Canal
End Sub


By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 nov. 2003 à 11:48
lol, les grands esprits se rencontrent ! (je te rassure, les petits aussi !)

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
30 nov. 2003 à 11:50
Excelent !

:-)

E.B.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
30 nov. 2003 à 12:37
OK merci beaucoup. Ca roule tout seul maintenant !
;o)

Manu
0
Rejoignez-nous