cs_Kite37
Messages postés242Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention17 janvier 2018 27 févr. 2007 à 16:47
malkuth, je crois que je t'aime lol :) merci problème réglé :)
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 27 févr. 2007 à 15:49
Je ne voit pas se qui t'empêche d'utilisé System.Drawing dans une DLL, il faut juste l'ajouter dans les référence du projet de bibliothèque(click droit sur le projet, ajouter une référence onglet .NET, System.Drawing ;-) ).
cs_Kite37
Messages postés242Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention17 janvier 2018 27 févr. 2007 à 08:26
le problème, c'est que je cherche entre autre a sérialiser des bitmap, et je ne peux pas importer system.drawing, qui les contients, dans une projet bibliothèque de classe :s
D'après mes recherches, il vaudrait mieux se pencher sur les serializationBinder.
Je vous tiens au courant si je trouve la solution et que sa marche ..
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 26 févr. 2007 à 19:58
Je dirait, qu'il faut que tu créé ta classe sérializable dans une DLL(type de projet bibliothèque de classe), ensuite, dans tes deux projets, tu ajoute la référence vers le projet ou la DLL.
cs_Kite37
Messages postés242Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention17 janvier 2018 26 févr. 2007 à 14:45
hmm rebonjour les gens !
Bien alors j'ai fais mon éditeur de map, pas de problèmes lors de la sérialisation, et je peux désérialiser mon fichier comme il faut.
Mais uniquement avec l'éditeur meme, impossible de désérialiser ce fichier avec un autre logiciel ! autrement dis, je peux désérialiser ma map dans l'éditeur pour la modifier, mais je ne peux pas la lire dans le jeu :(
Quelqu'un a une idée?
voici l'erreur qui se produit :
"Impossible de trouver l'assembly 'Editeur de Map, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'."
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 2 févr. 2007 à 17:54
J'ai transformé ma structure en classe et l'ai mise dans uun fichier DLL :
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 19 janv. 2007 à 10:45
Ravi que ce code ait intéressé (et continuera d'intéresser) quelques personnes. Bon courage pour ton projet Kite37 : le mien avance à grand pas depuis ce problème de sérialisation. Il est même pratiquement fini.
cs_Kite37
Messages postés242Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention17 janvier 2018 18 janv. 2007 à 19:24
j'ai fait quelques tests rapide avec des classes d'essaie tappées en 2 minute, et mettant des images et compagnie, et bien tout a l'air de marcher parfaitement !
Merci beaucoup pour ton aide malkuth, et a toi aussi _fabien pour avoir posté ce code qui me permettra surement de réaliser quelques chose de très bien pour un prochain jeu :)
@ bientot, cordialement, KiTe
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 18 janv. 2007 à 09:41
On peut les serializer mais je suis pas sur que le format soit compressé...à vérifier.
cs_Kite37
Messages postés242Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention17 janvier 2018 16 janv. 2007 à 18:41
pendant que j'y suis, une toute dernière question (promis) :
peut-on sérialiser des images? par exemple si j'associes une image a une case, je peuxla sérialiser pour pouvoir la load directement par la suite?
merci pour les réponses déja postées en tout cas :) et bon travail _Fabien, tout de même :)
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 16 janv. 2007 à 18:24
merci beacoup c'est sympa ^^
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 16 janv. 2007 à 13:05
' 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
' Constructeur
Public Sub New(ByVal __pseudo As String, ByVal __score As Integer, _
ByVal __reussite As Double, ByVal __duree_jeu as TimeSpan)
_pseudo = __pseudo
_score = __score
_reussite = __reussite
_duree_jeu = __duree_jeu
End Sub
End Structure
Public 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
Public Function Deserialize(ByVal fichier As String) As Boolean
Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream
Dim result As HighScore
If Not File.Exists(fichier) Then
return false
else
stream = New FileStream(fichier, FileMode.Open)
While True
Try
result = deserializer.Deserialize(stream)
Console.WriteLine("Pseudo : {0}, score : {1} bonnes réponses, reussite : {2}%, temps : {3}.", result.pseudo , result.score, result.reussite, result.duree_jeu)
stream.Flush
Catch
Exit While
End Try
End While
stream.Close()
console.ReadLine
return true
End If
End Function
Sub Main()
' TimeSpan exprime une durée
Dim duree As New TimeSpan(1000000000000)
If not Deserialize(nom_fichier) Then
Console.WriteLine("Le fichier n'existe pas.")
End If
End Sub
End Module
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 16 janv. 2007 à 10:44
c'est pourtant ce que j'ai fait mais j'ai les numéro des lignes ! lol j'ai pas de chance tans pis :(
Bonne source au passage
Merci
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 16 janv. 2007 à 10:20
fdiedler2000, je sélectionne tout à la souris puis Ctrl+C ou Edition->Copier.
Intéressant Malkuth !
Kite37, non ! Dans mon code, je les récupère une par une séquentiellement. Ensuite est-ce possible de récupérer ou modifier directement que la 3ème par exemple ? Sans doute. Faut voir les méthodes proposées.
cs_Kite37
Messages postés242Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention17 janvier 2018 15 janv. 2007 à 18:45
merci beaucoup pour ta réponse sa va m'être d'une aide très précieuse :)
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 15 janv. 2007 à 13:33
PS : C'est tous a fais possible pour les classes , pour ce qui est de sérialser des tableux, le plus simple est de mettre le tableau dans une collection et de sérialiser la collection, lors de la désérialisation tu récupère une collection avec tous tes objets dedans. ex :
'Création de la collection
Dim duree As New TimeSpan(1000000000000)
Dim HighScores as new System.collections.generic.List(of HighScore)(
new HighScore(){
New HighScore("Fabien",15,70.5,duree),
New HighScore("Casy",13,80.33,duree),
New HighScore("Willy",13,70.67,duree),
New HighScore("X",11,98.5,duree),
New HighScore("CharlesRacaud",10, 92.15,duree),
}
);
'Sérialisation(Autres procédure)
Dim serializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream = New FileStream(fichier, FileMode.Create)
serializer.Serialize(stream, HighScores)
stream.Close()
'désérialisation(Autres procédure)
Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream = New FileStream(fichier, FileMode.Open)
Dim HighScores as System.collections.generic.List(of HighScore)= deserializer.Deserialize(stream)
stream.Close()
Ca résoud aussi le problème de savoir quand s'arreter de lire le fichier réponse : c'est pas mon problème c'est la désérialisation de la collection qui s'en occupe.
donc le mieux c'est de sérialiser un objet unique
par example pour la map d'un jeu on crée un classe de ce genre :
Classe MAP
Chaine Nom
Nombre Version
List(Of Block) Bloks
Fin Classe
Classe Block
Image ImageFond
int CoordX
int CoordY
Fin Classe
et lors de la sérialisation d'un objet MAP, les Objet Block sont sérialisé de manière transparente et vice versa pour la déserialisation toutefois tous les objet de la hiérarchie doivent être sérializable (sauf avec les attribut voir msdn).
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 15 janv. 2007 à 13:04
C'est super la sérialisation mais ils faut faire trés attention pour que le programme soit évolutif, tout en restant compatible avec les fichier d'ancienne version et il faut noté que le sérialisation binaire demande certains droits, je vous conseille si vous avez trouver cette sources intérréssante de bien regarder dans la MSDN.
Il y'a en .net un deuxième type de sérialisation : la sérialisation XML sont avvantage est de produire des fichier XML c'est trés pratique lors du debbugage et on peut les modifier dans un simple notepad.
cs_Kite37
Messages postés242Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention17 janvier 2018 14 janv. 2007 à 13:03
je me pose une question : si dans le fichier tu sérialise plein de données, comment trouver celle voulue, ou toute les récupérer? car d'après ton code tu n'en récupère qu'une ..
moi par exemple, pour un jeu, je veux sérialiser la map. Deux choix s'offre a moi :
-Sérialiser chaque case de la map une par une
-Sérialiser directement la map avec le tableau de case.
Quel serait le choix le plus judicieux?
et est-ce possible de sérialiser des tableaux d'une structure différente de celle d'origine?
(ici, la structure map, ou la classe map, serait sérialisée, mais les "cases" apparaissant dans le tableaux appartiendrait a une autre structure..comment faire?)
Et une dernière question, est-il possible de faire de meme avec des classes?
Merci d'avance pour les réponses ^ ^
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 13 janv. 2007 à 20:46
Vous avez de la chacne moi il me prends les ligne... Vous utilisez un Ctrl C puis Ctrl V dans l'IDE ?
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 13 janv. 2007 à 19:18
Afyn, je ne sais pas ; je débute. A toi de creuser la question.
fdiedler2000 : ah bon ! Quand je sélectionne le code, il ne me prend pas les lignes. D'ailleurs, pleins de codes sont présentés comme le mien.
J'utilise IE7. Essayé aussi avec FireFox 2.0.0.1, pas de soucis non plus.
Willy, pour l'instant, je n'ai pas le temps et suis-je capable de le faire ? Je dois poursuivre mon projet perso pour mieux me former au VB.Net, mais si quelqu'un veut le faire, pas de problème.
fdiedler2000
Messages postés383Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention 1 décembre 2008 13 janv. 2007 à 12:17
tu devrais mettre un zip car quand on fait copier / coller pour ton code et bah on à le numéro des lignes aussi et donc il faut les enveler une par une et c'est chiant à terme surtout si le code est long !
Merci
Afyn
Messages postés608Date d'inscriptionsamedi 3 août 2002StatutMembreDernière intervention22 décembre 2016 12 janv. 2007 à 17:36
Et si un fichier binaire est structuré ? (comme un fichier Midifile par exe ...) est ce qu'on peut le lireplus facilement ?
Afyn - Navedac
_Fabien
Messages postés119Date d'inscriptionvendredi 17 novembre 2006StatutMembreDernière intervention28 avril 2008 12 janv. 2007 à 12:58
Pas bête Willi !
Voici la seconde version : j'ai ajouté un timespan pour montrer que l'on peut sérialiser autre chose que des nombres et des strings.
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201823 12 janv. 2007 à 12:20
Je ne sais pas quelle version de vb dont tu disposes, je te conseilles d'en faire une classe générique pour Serialier/déserialiser un objet/une structure.
Bonne continuation
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 12 janv. 2007 à 12:00
27 févr. 2007 à 16:47
27 févr. 2007 à 15:49
27 févr. 2007 à 08:26
D'après mes recherches, il vaudrait mieux se pencher sur les serializationBinder.
Je vous tiens au courant si je trouve la solution et que sa marche ..
26 févr. 2007 à 19:58
26 févr. 2007 à 14:45
Bien alors j'ai fais mon éditeur de map, pas de problèmes lors de la sérialisation, et je peux désérialiser mon fichier comme il faut.
Mais uniquement avec l'éditeur meme, impossible de désérialiser ce fichier avec un autre logiciel ! autrement dis, je peux désérialiser ma map dans l'éditeur pour la modifier, mais je ne peux pas la lire dans le jeu :(
Quelqu'un a une idée?
voici l'erreur qui se produit :
"Impossible de trouver l'assembly 'Editeur de Map, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'."
2 févr. 2007 à 17:54
http://www.vbfrance.com/code.aspx?ID=41347
19 janv. 2007 à 10:45
18 janv. 2007 à 19:24
Merci beaucoup pour ton aide malkuth, et a toi aussi _fabien pour avoir posté ce code qui me permettra surement de réaliser quelques chose de très bien pour un prochain jeu :)
@ bientot, cordialement, KiTe
18 janv. 2007 à 09:41
16 janv. 2007 à 18:41
peut-on sérialiser des images? par exemple si j'associes une image a une case, je peuxla sérialiser pour pouvoir la load directement par la suite?
merci pour les réponses déja postées en tout cas :) et bon travail _Fabien, tout de même :)
16 janv. 2007 à 18:24
16 janv. 2007 à 13:05
Imports System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Imports System.IO
Public Module Module1
Dim nom_fichier As String = "test.bin"
<Serializable()> _
Public structure 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
' Constructeur
Public Sub New(ByVal __pseudo As String, ByVal __score As Integer, _
ByVal __reussite As Double, ByVal __duree_jeu as TimeSpan)
_pseudo = __pseudo
_score = __score
_reussite = __reussite
_duree_jeu = __duree_jeu
End Sub
End Structure
Public 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 Function Deserialize(ByVal fichier As String) As Boolean
Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream
Dim result As HighScore
If Not File.Exists(fichier) Then
return false
else
stream = New FileStream(fichier, FileMode.Open)
While True
Try
result = deserializer.Deserialize(stream)
Console.WriteLine("Pseudo : {0}, score : {1} bonnes réponses, reussite : {2}%, temps : {3}.", result.pseudo , result.score, result.reussite, result.duree_jeu)
stream.Flush
Catch
Exit While
End Try
End While
stream.Close()
console.ReadLine
return true
End If
End Function
Sub Main()
' TimeSpan exprime une durée
Dim duree As New TimeSpan(1000000000000)
Serialize(New HighScore("Fabien",15,70.5,duree), nom_fichier)
Serialize(New HighScore("Casy",13,80.33,duree), nom_fichier)
Serialize(New HighScore("Willy",13,70.67,duree), nom_fichier)
Serialize(New HighScore("X",11,98.5,duree), nom_fichier)
Serialize(New HighScore("CharlesRacaud",10, 92.15,duree), nom_fichier)
If not Deserialize(nom_fichier) Then
Console.WriteLine("Le fichier n'existe pas.")
End If
End Sub
End Module
16 janv. 2007 à 10:44
Bonne source au passage
Merci
16 janv. 2007 à 10:20
Intéressant Malkuth !
Kite37, non ! Dans mon code, je les récupère une par une séquentiellement. Ensuite est-ce possible de récupérer ou modifier directement que la 3ème par exemple ? Sans doute. Faut voir les méthodes proposées.
15 janv. 2007 à 18:45
15 janv. 2007 à 13:33
'Création de la collection
Dim duree As New TimeSpan(1000000000000)
Dim HighScores as new System.collections.generic.List(of HighScore)(
new HighScore(){
New HighScore("Fabien",15,70.5,duree),
New HighScore("Casy",13,80.33,duree),
New HighScore("Willy",13,70.67,duree),
New HighScore("X",11,98.5,duree),
New HighScore("CharlesRacaud",10, 92.15,duree),
}
);
'Sérialisation(Autres procédure)
Dim serializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream = New FileStream(fichier, FileMode.Create)
serializer.Serialize(stream, HighScores)
stream.Close()
'désérialisation(Autres procédure)
Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream = New FileStream(fichier, FileMode.Open)
Dim HighScores as System.collections.generic.List(of HighScore)= deserializer.Deserialize(stream)
stream.Close()
Ca résoud aussi le problème de savoir quand s'arreter de lire le fichier réponse : c'est pas mon problème c'est la désérialisation de la collection qui s'en occupe.
donc le mieux c'est de sérialiser un objet unique
par example pour la map d'un jeu on crée un classe de ce genre :
Classe MAP
Chaine Nom
Nombre Version
List(Of Block) Bloks
Fin Classe
Classe Block
Image ImageFond
int CoordX
int CoordY
Fin Classe
et lors de la sérialisation d'un objet MAP, les Objet Block sont sérialisé de manière transparente et vice versa pour la déserialisation toutefois tous les objet de la hiérarchie doivent être sérializable (sauf avec les attribut voir msdn).
15 janv. 2007 à 13:04
Il y'a en .net un deuxième type de sérialisation : la sérialisation XML sont avvantage est de produire des fichier XML c'est trés pratique lors du debbugage et on peut les modifier dans un simple notepad.
14 janv. 2007 à 13:03
moi par exemple, pour un jeu, je veux sérialiser la map. Deux choix s'offre a moi :
-Sérialiser chaque case de la map une par une
-Sérialiser directement la map avec le tableau de case.
Quel serait le choix le plus judicieux?
et est-ce possible de sérialiser des tableaux d'une structure différente de celle d'origine?
(ici, la structure map, ou la classe map, serait sérialisée, mais les "cases" apparaissant dans le tableaux appartiendrait a une autre structure..comment faire?)
Et une dernière question, est-il possible de faire de meme avec des classes?
Merci d'avance pour les réponses ^ ^
13 janv. 2007 à 20:46
13 janv. 2007 à 19:18
fdiedler2000 : ah bon ! Quand je sélectionne le code, il ne me prend pas les lignes. D'ailleurs, pleins de codes sont présentés comme le mien.
J'utilise IE7. Essayé aussi avec FireFox 2.0.0.1, pas de soucis non plus.
Willy, pour l'instant, je n'ai pas le temps et suis-je capable de le faire ? Je dois poursuivre mon projet perso pour mieux me former au VB.Net, mais si quelqu'un veut le faire, pas de problème.
13 janv. 2007 à 12:17
Merci
12 janv. 2007 à 17:36
Afyn - Navedac
12 janv. 2007 à 12:58
Voici la seconde version : j'ai ajouté un timespan pour montrer que l'on peut sérialiser autre chose que des nombres et des strings.
12 janv. 2007 à 12:20
Bonne continuation
12 janv. 2007 à 12:00
Très bien