Création d'une DLL (classe High-Score) avec possibilité de (dé)sérialisation.
Le fichier zip comporte 2 sources :
- la classe HighScore (à compiler dans une bibliotèque de classe). A noter : dans les propiétés de la solution, vous devez laisser vide le "Namespace racine".
- le module (programme principal) qui fait appel à la classe : vous devez importer la classe "HighScore.dll" dans vos références avant de lancer le programme.
Source / Exemple :
Imports System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Imports System.IO
<Serializable()> _
Public Class HighScore
' attributs
Private _pseudo As String
Private _score As Integer
Private _reussite As Double
Private _duree_jeu As TimeSpan
' propriétés
Public Property pseudo() As String
Get
Return _pseudo
End Get
Set(ByVal value As String)
_pseudo = value
End Set
End Property
Public Property score() As Integer
Get
Return _score
End Get
Set(ByVal value As Integer)
_score = value
End Set
End Property
Public Property reussite() As Double
Get
Return _reussite
End Get
Set(ByVal value As Double)
_reussite = value
End Set
End Property
Public Property duree_jeu() As TimeSpan
Get
Return _duree_jeu
End Get
Set(ByVal value As TimeSpan)
_duree_jeu = value
End Set
End Property
Public Shared Sub Serialize(ByVal struct As HighScore, ByVal fichier As String)
Dim serializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream
'If struct Is Nothing Then Return False
If Not File.Exists(fichier) Then
stream = New FileStream(fichier, FileMode.Create)
Else
stream = New FileStream(fichier, FileMode.Append)
End If
serializer.Serialize(stream, struct)
stream.Close()
End sub
Public Shared Function Nb_Enregistrements(ByVal fichier As String) As Integer
Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream
Dim result As HighScore
Dim nb as Integer = 0
If Not File.Exists(fichier) Then
return -1
else
stream = New FileStream(fichier, FileMode.Open)
While True
Try
result = deserializer.Deserialize(stream)
nb += 1
stream.Flush
Catch
Exit While
End Try
End While
stream.Close()
return nb
End If
End Function
Public Shared Function Deserialize(ByVal fichier As String, ByRef t_HS() as HighScore) As Integer
Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream
Dim i, nb as Integer
If Not File.Exists(fichier) Then
return -1
Else
Try
nb = Nb_Enregistrements (fichier)
ReDim t_HS(nb)
Catch
console.Write ("Impossible de déterminer le nombre d'enregistrements.")
console.ReadKey
Exit Function
End Try
stream = New FileStream(fichier, FileMode.Open)
For i=0 to nb-1
t_HS(i) = deserializer.Deserialize(stream)
stream.Flush
Next
stream.Close()
return nb
End If
End Function
' Constructeur
Public Sub New(ByVal pseudo As String, ByVal score As Integer, _
ByVal reussite As Double, ByVal duree_jeu as TimeSpan)
Me._pseudo = pseudo
Me._score = score
Me._reussite = reussite
Me._duree_jeu = duree_jeu
End Sub
End Class
Conclusion :
Cette source fait suite à celle-ci :
http://www.vbfrance.com/codes/SERIALISATION-DESERIALISATION-STRUCTURE_41077.aspx
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.