Exception levée par l'initialiseur de type
Bonjour,
Je travaille depuis quelques mois sur une appli en VB.Net. Jusqu'alors, tout se passait très bien, ça marchait et tout et tout.
Mais voilà qu'aujourd'hui, mon programme ne fonctionne plus. Voici tous les détails en... détail :mouarf:
Pour les besoins de l'application, j'ai codé une sorte de base de données, basée sur l'utilisation d'une SortedList, contenant elle-même des ArrayList (indéxées par leur clé dans la SortedList).
Pour rendre plus facile le développement, j'ai fais une classe "clsBDD". En voici la source (attention, c'est un peu long) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| Imports System.IO
Imports System.Collections
Imports System.Runtime.Serialization.Formatters.Binary
Public Class clsBDD
Private Database As SortedList
Private al As ArrayList
Private StreamFile As Stream
Private Serializer As New BinaryFormatter
Private Enumerator As IDictionaryEnumerator
Private Fichier As String
' // METHODES PUBLIQUES
Public Sub New(ByVal fich As String)
Database = New SortedList()
al = New ArrayList
If Not File.Exists(fich) Then
CreateDirectory(fich)
End If
Fichier = fich
LoadFile()
End Sub
Private Sub CreateDirectory(ByVal fich As String)
If IO.Directory.Exists(fich.Substring(0, fich.LastIndexOf("\"))) = False Then
IO.Directory.CreateDirectory(fich.Substring(0, fich.LastIndexOf("\")))
End If
If Not File.Exists(fich) Then
File.WriteAllText(fich, "")
End If
End Sub
Public Sub Add(ByRef sVal As ArrayList)
Database.Add(GetLastID(), sVal)
End Sub
Public Property Item(ByVal sKey As String) As Object
Get
Return Database.Item(sKey)
End Get
Set(ByVal value As Object)
Database.Item(sKey) = value
End Set
End Property
Public Property Item(ByVal index As Integer) As Object
Get
Return Database.Item(Database.GetKey(index))
End Get
Set(ByVal value As Object)
Database.Item(Database.GetKey(index)) = value
End Set
End Property
Public ReadOnly Property Count() As Long
Get
Count = Database.Count
End Get
End Property
Public Sub Remove(ByVal sKey As String)
Database.Remove(sKey)
End Sub
Public Function GetLastID() As String
If Database.Count = 0 Then
Return 0
End If
Dim nb As Integer = 0
'' RECUPERATION NOMBRE LE PLUS GRAND
For i As Integer = 0 To Database.Count - 1
If nb < Database.GetKey(i) Then nb = Database.GetKey(i)
Next
Return nb + 1
End Function
Public Function GetidRow(ByVal index As Integer)
Return Database.GetKey(index)
End Function
Public Function KeyExists(ByVal sKey As String) As Boolean
If Database.IndexOfKey(sKey) = -1 Then Return False
'If Database.IndexOfKey(sKey) = Nothing Then Return False
Return True
End Function
' // METHODES PRIVEES
Private Sub LoadFile()
Try
StreamFile = File.OpenRead(Fichier)
Catch
End Try
If StreamFile.Length > 0 Then
Database = CType(Serializer.Deserialize(StreamFile), SortedList)
Else
Database = New SortedList
End If
StreamFile.Close()
End Sub
Public Sub Save()
File.WriteAllText(Fichier, "")
StreamFile = File.OpenWrite(Fichier)
Serializer.Serialize(StreamFile, Database)
StreamFile.Close()
End Sub
End Class |
Voilà pour le code =)
L'application est en mode "fenêtre" et j'instancie tous ces objets dans le Sub Form_Load().
Voici le code :
Code:
1 2 3 4 5 6 7 8
| Private Sub Load_Instances()
Musics = New clsBDD("Database\Musiques.mrm")
Categories = New clsBDD("Database\Categories.mrm")
RotationRules = New clsBDD("Database\RotationsRules.mrm")
RotationsGrid = New clsBDD("Database\RotationsGrid.mrm")
RotationEngine = New clsRotation()
Config = New clsBDD("Database\Config.mrm")
End Sub |
Tous les objets sont déclarés dans un Module, en Public :
Code:
1 2 3 4 5 6 7
| '' Classes de gestion BDD
Public Musics As clsBDD
Public Categories As clsBDD
Public RotationRules As clsBDD
Public RotationsGrid As clsBDD
Public RotationEngine As New clsRotation()
Public Config As clsBDD |
C'est là que tout va mal. Au débug, voici ce que Visual m'affiche : http://myprogsoft.online.fr/vbfr/ErMRM.png
La trace d'appels de l'InnerException affiche ceci :
Citation:
à My_Radiomatisme_Finale.clsRotation..ctor() dans C:\Documents and Settings\Ted\Mes documents\Visual Studio 2005\Projects\My Radiomatisme Finale\My Radiomatisme Finale\Classes\clsRotation.vb:ligne 37
à My_Radiomatisme_Finale.modClasses..cctor() dans C:\Documents and Settings\Ted\Mes documents\Visual Studio 2005\Projects\My Radiomatisme Finale\My Radiomatisme Finale\Modules\modClasses.vb:ligne 9
Je tiens à préciser que si j'instancie directement les objets dans le module ("Public Music As New clsBDD(...)"), ça plante aussi, avec la même erreur.
Voilà, après de maintes et longues recherche sur Google et tous les forums spécialisés que j'ai pu trouver, j'en viens à demander de l'aide ici.
Merci à toute âme charitable qui saurait m'apporter un peu d'aide :)