Meilleur auteur de réponses
Comment appeler ma fonction de classe Vb6 depuis mon exe Vb2008 ?

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 TypePublic 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 Booleanalors 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)- Type modifié Alex Petrescu mercredi 27 janvier 2010 08:17
- Type modifié Gilles TOURREAUModerator jeudi 28 janvier 2010 20:37
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)- Marqué comme réponse Gilles TOURREAUModerator jeudi 28 janvier 2010 20:37
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 -
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 -
-
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)- Marqué comme réponse Gilles TOURREAUModerator jeudi 28 janvier 2010 20:37