none
Comment appeler ma fonction de classe Vb6 depuis mon exe Vb2008 ? RRS feed

  • Question

  • Bonjour,

    Mon projet est en cours de mise à niveau depuis Vb6 vers Vb9 (VbNet2008).
    J'ai un problème pour appeler la fonction d'une classe vb6, qui, elle, n'est pas migrée.
    Je vous résume ci-dessous l'appel de cette fonction en Vb6, puis en VbNet.

    Aidez-moi svp !!!

    -------------------------------------
    EN VB6, AVANT MISE A NIVEAU
    -------------------------------------
    En Vb6, l'une de mes classes (SUClientFct) possède le type et la fonction suivante:

    Public Type ClientFct_ListeFonction
        strNomPeriph As String
        bytIPPeriph(0 To 3) As Byte
        lngFonction As Long
        lngParam(0 To 11) As Long
        strChaine As String
        blnPNotifyIfBusy As Boolean
    End Type

    Public Function MSendAsync(ByRef uFonctions() As SUClientFct.ClientFct_ListeFonction) As Boolean

    Toujours en Vb6, mon programme principal appelle cette fonction ainsi:
    call clsRVENetClientFct.MSendAsync(uFonctionEnAttente())

    ----------------------------------------
    EN VB2008, APRES MISE A NIVEAU
    -----------------------------------------
    Mon programme principal est mis à niveau en Vb9 (VbNet2008), ma classe est maintenu en Vb6.

    Après mise à niveau de mon programme principal, la fonction de ma classe est référencée ainsi dans l'explorateur d'objet:
    Function MSendAsync(ByRef uFonctions As System.Array) As Boolean

    alors que l'appel dans mon programme principal est toujours
    Dim uFonctionEnAttente() As SUClientFct.ClientFct_ListeFonction
    call clsRVENetClientFct.MSendAsync(uFonctionEnAttente)

    Donc evidemment ça génère une erreur, puisque la classe et sa "couche d'interoperabilité", attends dorénavant un System.Array.

    COMMENT FAIRE pour déclarer ma un "System.array" qui aurait la structure du type ClientFct_ListeFonction da la classe ?

    MERCI D'AVANCE.


    Projet volumineux en cours de migration de Vb6 à VbNet2008 Visual Studio 2008 - VbNET/Vb6(COM)
    mercredi 20 janvier 2010 09:17

Réponses

  • Bonsoir,

    Je suis confus car j'ai résolu mon problème, et il apparaît que cela n'avait pas de rapport avec le paramétrage "As System.Array"  (utilisé pour appeler la fonction de ma classe vb6) issu de la mise à niveau automatique du code vb6 vers vbnet.

    Pour ceux qui seront attiré par le titre de mon thread, notez que mon descriptif est rigoureusement exact, MAIS QUE CELA FONCTIONNE !
    Il est possible d'appeler la fonction MSendAsync() avec en paramètre ma structure propriétaire attendue par la classe, bien que l'explorateur d'objet décrit la même fonction comme paramétrable avec une variable "As System.Array"...

    Je remercie messieurs Gilles TOURREAU et Alex Petrescu pour l'aide qu'ils m'ont offert, et tout particulièrement Gilles TOURREAU pour sa généreuse proposition d'analyse de petit projet. J'espère bénéficier à nouveau d'une telle offre si je bloque prochainement sur un autre problème !!!

    Juste pour information sur ma résolution de problème, et même si cela n'a pas de rapport avec le message initial, mon soucis venait d'un redimensionnement de tableau de type "Array.Resize(uFonctionEnAttente, MaDimension)" qui ne fonctionne pas avec une structure propriétaire. J'ai résolu le problème en utilisant la bonne vieille syntaxe "ReDim Preserve uFonctionEnAttente(MaDimension)"...

    Cordialement,
    Projet volumineux en cours de migration de Vb6 à VbNet2008 Visual Studio 2008 - VbNET/Vb6(COM)
    jeudi 28 janvier 2010 16:32

Toutes les réponses

  • Bonjour,

    Est-il possible que vous puissiez m'envoyer un petit projet qui reproduirait le problème sur : gilles.tourreau@pos.fr ?

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    mercredi 20 janvier 2010 22:37
    Modérateur
  • Bonjour,

    Premièrement, il faut faire attention qu’un array en VB6 déclaré comme ca :

    Dim Item(4) as MyClass

    est un array avec 5 éléments, de 0 à 4. En VB.Net, un array déclaré comme ça n’a que 4 éléments, de 0 à 3.

     

    Vous pouvez consulter aussi l’espace de noms Microsoft.VisualBasic.Compatibility.VB6

     

    J’espère que ça vous sera utile.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    vendredi 22 janvier 2010 14:53
  • Bonjour,

    Aucun progrès avec votre projet ?

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    lundi 25 janvier 2010 11:03
  • Bonsoir,

    Je suis confus car j'ai résolu mon problème, et il apparaît que cela n'avait pas de rapport avec le paramétrage "As System.Array"  (utilisé pour appeler la fonction de ma classe vb6) issu de la mise à niveau automatique du code vb6 vers vbnet.

    Pour ceux qui seront attiré par le titre de mon thread, notez que mon descriptif est rigoureusement exact, MAIS QUE CELA FONCTIONNE !
    Il est possible d'appeler la fonction MSendAsync() avec en paramètre ma structure propriétaire attendue par la classe, bien que l'explorateur d'objet décrit la même fonction comme paramétrable avec une variable "As System.Array"...

    Je remercie messieurs Gilles TOURREAU et Alex Petrescu pour l'aide qu'ils m'ont offert, et tout particulièrement Gilles TOURREAU pour sa généreuse proposition d'analyse de petit projet. J'espère bénéficier à nouveau d'une telle offre si je bloque prochainement sur un autre problème !!!

    Juste pour information sur ma résolution de problème, et même si cela n'a pas de rapport avec le message initial, mon soucis venait d'un redimensionnement de tableau de type "Array.Resize(uFonctionEnAttente, MaDimension)" qui ne fonctionne pas avec une structure propriétaire. J'ai résolu le problème en utilisant la bonne vieille syntaxe "ReDim Preserve uFonctionEnAttente(MaDimension)"...

    Cordialement,
    Projet volumineux en cours de migration de Vb6 à VbNet2008 Visual Studio 2008 - VbNET/Vb6(COM)
    jeudi 28 janvier 2010 16:32