Partage
  • Partager sur Facebook
  • Partager sur Twitter

Paramètre ByRef modifier par une fonction

Paramètre ByRef modifier par une fonction en vb.net

Sujet résolu
    22 octobre 2018 à 15:29:36

    Bonjour la communauté,

    Je ne comprend pas comment il est possible que ma variable "Msg" ci-dessous soit modifiée lors de sont appel:

    Public Declare Function Telecom Lib "CEX" (ByVal Type1 As Byte, ByVal Type2 As Byte, ByVal Code As Short, ByVal Msgs As String, ByVal Tail As Short) As Short
    
    Public Sub EnvoyerDemande(ByVal TypeTrame As TYPE_TRAME_OMRON_BTN, ByVal Trame As String)
    Dim Msg As String
    Msg = New String(" ", 255)
    Telecom(T1, T2, Code, Msg, 0)
    End Sub

    Est-ce que quelqu'un a une idée?

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
    Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
      22 octobre 2018 à 19:31:35

      Il n'y a aucun paramètre "ByRef" dans ce code.
      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        12 novembre 2018 à 9:03:35

        Bonjour Bacelar,

        En faite, je passe ma variable en ByVal mais la variable Msg est modifiée par la DLL C++ et c'est là l'objet de ma question?

        Comment une variable passée et ByVal peux être modifiée par un fonction?

        Merci de votre temps.

        • Partager sur Facebook
        • Partager sur Twitter
        Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
          12 novembre 2018 à 9:34:44

          C'est vous, avec votre déclaration "Public Declare Function Telecom Lib ...", qui indiquez comment la fonction est censée travailler avec ces arguments.

          Si la fonction C++ ne la respecte pas, c'est peut-être que votre déclaration ne correspond pas à celle intrinsèque du code C++, ou que le code ne la respecte pas, etc...

          Passez un "String" .NET directement à du code natif C++, et pas du code C++/CLI, c'est très louche.

          Il y a de grosse chance que ce machin ne soit qu'un simple "char*" C qui laisse libre-cours aux actions du code natifs.

          Concrètement, il ressemble à quoi le .h de la librairie C++ ?

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            12 novembre 2018 à 11:01:02

            Je n'ai malheureusement pas accès au code c++ mais je comprend d'après votre réponse que mon code vb malgré une déclaration byval envoi tout de même la référence au code c++ ce qui lui permet de modifier ma variable.
            • Partager sur Facebook
            • Partager sur Twitter
            Si vous ne réussissez pas du premier coup, appelez ça « version 1.0 ».
              12 novembre 2018 à 11:08:09

              Généralement, quand on passe un truc comme une chaine de caractère à du code natif, il y a tout un décorum d'attribut pour gérer l'encodage, le layout de la variable, etc... et pas juste un "ByVal" tout mouillé.

              Le fournisseur de votre Dll, il fournit pas un exemple d'appel à leur bidule depuis du code .NET ?

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

              Paramètre ByRef modifier par une fonction

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown