Declaration de type en vb

Résolu
Bonjour,

Avant tout je suis sous xp et veux utiliser le VB pour appeler une dll en c.

Je souhaite créer deux types dont l'un appelle l'autre.

par exemple:

Type type1
dec1 As Long
dec2 As Long
dec3 As Long
dec4 As Long
End Type

Type type2
dec5 As Long
dec6 As Long
dec7 As type1
End Type

Voila mais en faite j'envoie une donnée de la deuxieme à une dll.
Celle-ci doit modifier les valeurs qui sont dans les données de "type1" c'est à dire "dec7"
J'espere que je me suis fait comprendre!!

sinon en bref ce que je souhaite c'est faire passer dans type2 le type1 mais en référence... que les données puisse être modifié.

Est-ce possible et si oui comment le faire???

merci d'avance pour toutes réponses...

Séb

4 réponses

  1. Salut,

    Questions !

    "j'envoie les données par une fonction qui est dans une dll par référence"

    Je comprends ici que tu fais appel a une fonction externe qui est
    dans une dll écrite en C !

    Il est a penser que ta variable dans la fonction est mal déclarer !
    Ou peut-être même ton type !

    Un peu de code peut-être !

    Lupin

    ~L'essentiel est invisible pour les yeux~
    ~On ne voit bien qu'avec le coeur~
    1. oui c est cela a quelques differences près:

      Option Explicit

      Public Type Type1
      Dec1 As Long
      Dec2 As integer
      Dec3 As integer
      Dec4 As string
      End Type

      Public Type Type2
      Dec5 As Long
      Dec6 As Long
      Dec7() As Type1
      End Type

      Sub PremierNiveau()

      Dim Truc As Type2

      ReDim Truc.Dec7(2)

      Truc.Dec7(1).Dec1 = 128
      MsgBox Truc.Dec7(1).Dec1

      SecondNiveau Truc
      MsgBox Truc.Dec7(1).Dec1

      End Sub

      Sub SecondNiveau(ByRef Trac As Type2)

      Trac.Dec7(1).Dec1 = 256

      End Sub

      en faite il n'y a pas de second niveau lorsque j'ai defini mes valeurs dans le premier niveau j'envoie les données par une fonction qui est dans une dll par référence (ce qui devrai la rendre modifiable (byref))

      et en fait lorsque je regarde coté dll j'ai les bonnes valeurs pour le premier niveau mais par pour le second, je m'explique:
      truc.Dec5
      truc.Dec6
      sont OK
      mais des que j'utilise mon type, a partir de Dec7, la les valeurs qui ont été passé en paramètres ne sont plus bonne du tout c est comme si il n'y faisait plus référence!!

      saurais-tu y remedier?

      Merci beaucoup de t'y interesser !!

      Séb
      1. Bonjour,

        Ai-je bien comprit votre démarche ?

        Option Explicit

        Public Type Type1
        Dec1 As Long
        Dec2 As Long
        Dec3 As Long
        Dec4 As Long
        End Type

        Public Type Type2
        Dec5 As Long
        Dec6 As Long
        Dec7() As Type1
        End Type
        '

        Sub PremierNiveau()

        Dim Truc As Type2

        ReDim Truc.Dec7(2)

        Truc.Dec7(1).Dec1 = 128
        MsgBox Truc.Dec7(1).Dec1
        SecondNiveau Truc
        MsgBox Truc.Dec7(1).Dec1

        End Sub
        '

        Sub SecondNiveau(ByRef Trac As Type2)

        Trac.Dec7(1).Dec1 = 256

        End Sub

        Lupin

        ~L'essentiel est invisible pour les yeux~
        ~On ne voit bien qu'avec le coeur~
        1. alors j ai des nouvelles...
          en fait c est tout a fait possible de faire ca.

          Type type1
          dec1 As Long
          dec2 As Long
          dec3 As Long
          dec4 As Long
          End Type

          Type type2
          dec5 As Long
          dec6 As Long
          dec7() As type1
          End Type

          On peux mettre comme ci-dessus un tableau
          mais mon probleme est toujours là, lorsque je veux l'utiliser les valeurs que j envoie apres par une fonction ne marche pas...

          Dim truc As type2

          redim truc.dec7(2)
          truc.dec7(0).dec1=...

          ok pour ca mais apres j'envoie à une fonction avec la methode byref et en fait ca ne marche pas du tout ce que je recois de l'autre coter est complètement différent (juste au niveau de la structure type1 le type 2 est comme il faut!!!

          quelqu'un comprend quelque chose ou pas????

          Merci d'avance
          Séb