Bonjour,

Lors de la compilation de mon projet, j'ai une erreur "Impossible d'effectuer un cast d'un objet de type 'system.compiler.class' en type 'system.compiler.struct'", et là je ne vois pas trop pourquoi.

Mon code est le suivant:
J'ai une classe de variables qui me défini une espèce de forme élémentaire de dessin:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Public Class ClassDessinLadder
 
    ' Type de donnée pour le dessin des équations
 
    Dim _TypeContact As Integer      ' code du type de contact 1:NO/2:NF/0:Rien
    Dim _BG As Integer               ' code du dessin à gauche du contact 
    Dim _HG As Boolean               ' code du dessin à gauche de la variable True:Trait vertical/False:Rien
    Dim _Variable As String          ' Adresse de la variable si elle existe
 
    '' Constructeurs
    Friend Sub New(ByVal TypeC As Integer, BasGauche As Integer, HautGauche As Integer, Var As String)
        _TypeContact = TypeC
        _BG = BasGauche
        _HG = HautGauche
        _Variable = Var
    End Sub
 
    '' Accesseurs
    Property TypeContact() As Integer
        Get
            Return _TypeContact
        End Get
        Set(ByVal Valeur As Integer)
            _TypeContact = Valeur
        End Set
    End Property
    Property BasGauche() As Integer
        Get
            Return _BG
        End Get
        Set(ByVal Valeur As Integer)
            _BG = Valeur
        End Set
    End Property
    Property HautGauche() As Integer
        Get
            Return _HG
        End Get
        Set(ByVal Valeur As Integer)
            _HG = Valeur
        End Set
    End Property
    Property Variable() As String
        Get
            Return _Variable
        End Get
        Set(ByVal Valeur As String)
            _Variable = Valeur
        End Set
    End Property
 
End Class
Cette classe est appelée dans une autre classe beaucoup plus importante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Public Class ClassEquaSeq
 
    ' Cette classe definit l'ensemble des données associées à la définition des séquences du séquentiel
    Protected Structure AdresseMatrice
        Dim AdrV As Integer
        Dim AdrH As Integer
    End Structure
 
    Protected _Equa As New List(Of String)
    Protected _Num As Integer
    Protected _Decode As Boolean
    Protected _DessinEqua As New List(Of Dictionary(Of AdresseMatrice, ClassDessinLadder))
 
    '' Constructeurs
    Friend Sub New(ByVal Numero As Integer, ByVal Equation As String)
        _Num = Numero
        _Equa.Add(Equation)
        _Decode = False
        _DessinEqua.Add(Nothing)
    End Sub
    Friend Sub New()
        _Num = Nothing
    End Sub
 
    '' Accesseurs
    Property Numero() As Integer
        Get
            Return _Num
        End Get
        Set(ByVal Valeur As Integer)
            _Num = Valeur
        End Set
    End Property
    Property Equation(ByVal Index As Integer) As String
        Get
            Return _Equa(Index)
        End Get
        Set(ByVal Valeur As String)
            _Equa(Index) = Valeur
        End Set
    End Property
    Property Decode() As Boolean
        Get
            Return _Decode
        End Get
        Set(ByVal Valeur As Boolean)
            _Decode = Valeur
        End Set
    End Property
    ReadOnly Property DessinEqua(ByVal Index As Integer, V As Integer, H As Integer) As ClassDessinLadder
        Get
            Dim Adresse As New AdresseMatrice
            Adresse.AdrV = V
            Adresse.AdrH = H
            Return _DessinEqua(Index).Item(Adresse)
        End Get
    End Property
 
    '' Méthodes
    Friend Sub AddEqua(ByVal Equation As String)
        _Equa.Add(Equation)
        _DessinEqua.Add(Nothing)
    End Sub
    Friend Function CountEqua() As Integer
        Return _Equa.Count
    End Function
    Friend Sub AddLadderOpe(ByVal Index As Integer, V As Integer, H As Integer, BasGauche As Integer)
        Dim Adresse As New AdresseMatrice
        Adresse.AdrV = V
        Adresse.AdrH = H
        Dim Contact As New ClassDessinLadder(Nothing, BasGauche, Nothing, Nothing)
        _DessinEqua(Index).Add(Adresse, Contact)
    End Sub
    Friend Sub AddLadderContact(ByVal Index As Integer, V As Integer, H As Integer, TypeContact As Integer, NomVariable As String)
        Dim Adresse As New AdresseMatrice
        Adresse.AdrV = V
        Adresse.AdrH = H
        Dim Contact As New ClassDessinLadder(TypeContact, Nothing, Nothing, NomVariable)
        _DessinEqua(Index).Add(Adresse, Contact)
    End Sub
    Friend Sub MaJLadderOpe(ByVal Index As Integer, V As Integer, H As Integer, BasGauche As Integer, HautGauche As Boolean)
        Dim Adresse As New AdresseMatrice
        Adresse.AdrV = V
        Adresse.AdrH = H
        _DessinEqua(Index).Item(Adresse).HautGauche = HautGauche
        _DessinEqua(Index).Item(Adresse).BasGauche = BasGauche
    End Sub
Bon cela a peut-être l'air un peu tordu, mais pourtant dans ma tête c'est "presque" super clair:
  • je récupère dans un fichier texte plein de lignes qui sont des équations booléennes (des truc d'automaticiens avec des ET et des OU)
  • La structure de ce que je récupère fait que pour une équation donnée, je peux avoir 1 numéro et une équation ou 1 numéro et une série d'équations (ça, ça explique le "_Equa As New List(Of String)")
  • Ensuite j'ai tout un tas de code qui marche pas trop mal et qui me fait afficher ces équations dans un datagridview, les équations sont affichées sous forme de "texte" avec plein de trucs qui se passent quand on clique sur une partie du texte
  • Bon jusqu'à ce moment de mon projet, tout allait bien et je compilais l'ensemble du code sans erreur
  • Maintenant mon objectif c'est de dessiner cette équation. Du coup une équation du genre "S87.[B24+B26][R24.E144+R24.E128+R61.E145+R61.E129]=R81." doit être représentée comme ça :
    Nom : Capture ladder.PNG
Affichages : 386
Taille : 3,8 Ko
  • Dans mon code je vais lire l'équation textuelle et la transformer en dessin (j'ai déjà le code qui marche sous excel d'où l'image). Je cherche à avoir un objet qui est le stockage de cette forme de dessin
  • Au début je suis parti sur l'idée de créer une liste de tableau de 2 dimensions de taille maxi possible (les équations ont des tailles différentes qui peuvent donner des dessins plus ou moins longs et plus ou moins hauts). Bon après réflexion, je me suis dit que le coup de la liste de tableaux 2 dimensions de taille maxi (liste pour avoir un dessin par _Equa) ça ne faisait pas très langage objet
  • Je décide donc de faire une classe qui contient un "carré de mon dessin" (le contact, son nom, ce qu'il faut dessiner à sa gauche immédiate): ça c'est ma ClassDessinLadder
  • Ensuite pour l'utiliser facilement dans mon datagridview (et par analogie avec un tableau 2 dimensions), je le stocke dans une liste de dictionnaires où la clef est l'adresse Verticale/Horizontale du dessin, donc pour la clef je crée une structure AdresseMatrice, comme ça je peux faire toutes les opérations liées aux dictionnaires dessus.
  • D'où le code dans ClassEquaSeq. Pour l'instant toutes les méthodes ne sont pas encore là mais les principales le sont.


Et là j'avoue je suis complètement sec sur le message d'erreur que j'obtient à la compilation. Je ne vois pas ce qu'il essaye de "caster".

Si quelqu'un peut me donner un petit coup de main, je suis preneur.

Merci d'avance.