Préciser le type String, integer, boolean etc en tant qu'argument dans une sub o [Résolu]

BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 10 mai 2012 à 23:23 - Dernière réponse : NHenry 14207 Messages postés vendredi 14 mars 2003Date d'inscription 22 juin 2018 Dernière intervention
- 11 mai 2012 à 19:26
Bonjour à tous,
J'ai écrit une classe qui permet de gérer les fichiers INI et dans ma fonction TryTogetValueINI je dois préciser le type de la valeur que doit retourner la fonction. Problème : les arguments VarType : Int32, Boolean, String ne sont pas acceptés dans le code ci-dessous :
Savez vous comment faire en sorte que ces arguments soit acceptés ?

Extrait du code qui ne fonctionne pas :

Dim FileINI As New clsFichiersINI("Test.ini")

        Dim int As Object = FileINI.TryToGetValueINI("Section1", "Int", Int32)
        Dim boll As Object = FileINI.TryToGetValueINI("Section1", "Boll", boolean)
        Dim str As Object = FileINI.TryToGetValueINI("Section1", "Str",String)


Extrait de ma classe clsFichiersINI :

Public Function TryToGetValueINI(ByVal section As String, ByVal key As String, ByVal VarType As Type)
......
Return = Convert.ChangeType(Value, vartype)
......
    End Function
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 11 mai 2012 à 15:19
3
Merci
C'est bon j'ai trouvé :
En VB.NET il faut utiliser les TypeCode (TypeCode.String, TypeCode.Boolean ...etc).

Dim FileINI As New clsFichiersINI("Test.ini")

        Dim int As Object = FileINI.TryToGetValueINI("Section1", "Int", TypeCode.Int32)
        Dim boll As Object = FileINI.TryToGetValueINI("Section1", "Boll", TypeCode.Boolean)
        Dim str As Object = FileINI.TryToGetValueINI("Section1", "Str",TypeCode.String)


Public Function TryToGetValueINI(ByVal section As String, ByVal key As String, ByVal VarType As TypeCode)
......
Return Convert.ChangeType(Value, vartype)
......
End Function


Les constantes enumérables : vbString, vbBoolean (ou VariantType.String, VariantType.boolean), c'est du VB6.
Il ne faut surtout tenter de convertir des type VB6 avec des méthodes VB.NET (Exemple : la constante vbinteger est interprété comme un type boolean par la fonction : Convert.ChangeType(Value, vartype).

Merci à vous.

Merci BasicZx81 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 119 internautes ce mois-ci

Commenter la réponse de BasicZx81
Utilisateur anonyme - 11 mai 2012 à 04:45
0
Merci
Bonjour,

Une idée comme cela.

essaie

vartype as object

au lieu de

vartype as type
Commenter la réponse de Utilisateur anonyme
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 11 mai 2012 à 08:20
0
Merci
Bonjour,
Etes-vous certains de ce que l'équivalent de ceci (écrit en VB6) n'existe pas en VB.Net :
Private Sub Command1_Click()
MsgBox toto("blabla", vbString) '=== >> on passe un type
End Sub

Private Function toto(a As String, b As VbVarType ) ' on reçoit un type
MsgBox b
End Function



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 11 mai 2012 à 11:25
0
Merci
Y a un une chose qui m'intrigue. L'utilisation du = pour un return.

Return = 1

chez moi génère : Expression expected.
Commenter la réponse de 4u4me4us
NHenry 14207 Messages postés vendredi 14 mars 2003Date d'inscription 22 juin 2018 Dernière intervention - 11 mai 2012 à 12:48
0
Merci
Bonjour,

Regardes peut être du coté des génériques :

Public Function MaFonction(Of T)(Parametres) As T

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 11 mai 2012 à 13:45
0
Merci
Bonjour à tous et merci pour vos réponses.

4u4me4us -> bien vu, j'ai fait une erreur en recopiant mon code sur le forum. il n'y a de "=".

ucfoutu -> je viens d'essayer : les types vbstring, vbBollean...etc passent bien mais il faut également changer le type d'argument dans ma fonction en varianType (comme ceci : Public Function TryToGetValueINI(ByVal section As String, ByVal key As String, ByVal VarType As VariantType). Pour le coup c'est accepté par l'editeur de VB2010 mais je n'ai aucune idée si cela fonctionne vraiment, il faut que je fasse des tests plus approfondies)

NHenry -> En effet c'est une possibilité qui fonctionne mais je voulais justement éviter cette syntaxe pour faire quelque chose de plus "conforme" au standard que l'on rencontre le plus souvent dans les méthodes de classes. Si la méthode de ucfoutu ne fonctionne pas j'utiliserais celle-ci.

Je vais de ce pas tester tous ça. Merci à vous.
Commenter la réponse de BasicZx81
BasicZx81 140 Messages postés samedi 5 mars 2011Date d'inscription 13 août 2013 Dernière intervention - 11 mai 2012 à 13:54
0
Merci
Edit : ( ah ben non on peux pas éditer sur le forum...)
Le type variantType c'est plutôt du VB6 remplacé au profit du type Object en VB.NET si je ne dit pas de bétises, du coup c'est peut-être cmarcotte qui est aussi dans le vrai.

Je teste ça.
Commenter la réponse de BasicZx81
NHenry 14207 Messages postés vendredi 14 mars 2003Date d'inscription 22 juin 2018 Dernière intervention - 11 mai 2012 à 19:26
0
Merci
Bonjour,

Penses aussi à lire le point 3 de ma signature, je pense que ça sera encore mieux.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.