IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Utilisation de la méthode .NET Type.InvokeMember


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Par défaut Utilisation de la méthode .NET Type.InvokeMember
    Bonjour,

    Je cherche à utiliser la méthode Type.InvokeMember du Framework .NET afin de faire de la réflexion sur des objets .NET dans mon application Windev.

    Je n'arrive pas à passer la liste des arguments à la méthode InvokeMember : le type attendu est un tableau d'objets comme MSDN l'indique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Object InvokeMember(
    	string name,
    	BindingFlags invokeAttr,
    	Binder binder,
    	Object target,
    	Object[] args
    )
    Mon problème est de trouver comment faire en Windev pour construire un tableau d'objets contenant des types de base (entier, booléen).

    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    tpArgs est un tableau de 1 "System.Object"
    opArgInt32 est un "System.Int32"(2)
    tpArgs[1] = opArgInt32
     
    opType.InvokeMember(cpNomParam, BindingFlags.SetField, Null, opCmd, tpArgs)
    Mais Windev plante à l'éxécution sur la ligne en disant Types incompatibles durant une affectation.

    J'ai aussi essyé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tpArgs est un tableau de 1 "System.Object" dynamique
    tpArgs[1] = allouer un "System.Int32"(2)
     
    opType.InvokeMember(cpNomParam, BindingFlags.SetField, Null, opCmd, tpArgs)
    Mais dans ce cas, il y a une erreur de compilation : Aucune syntaxe de InvoleMember ne correspond.

    Je cale ! Merci pour votre aide.

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 2
    Par défaut Solution alternative
    J'ajoute une solution de contournement mais qui ne concerne que le cas ou on utilise la méthode InvokeMethod pour valoriser des propriétés.
    La solution c'est de passer plutôt par la classe PropertyInfo avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    opType est un Type dynamique
    opPropertyInfo  est une PropertyInfo dynamique
    epArg est un entier
    opArgObj est un "System.Int32"(epArg)
     
    opType  = opCmd.GetType()
    opPropertyInfo = opType.GetProperty(cpNomParam)
    opPropertyInfo.SetValue(opArgObj, opCmd)
    Je rappelle que opCmd est l'objet sur lequel je veux valoriser ma propriété (qui porte le nom cpNomParam)

    Ca marche nickel dans Windev car du coup on peut typer directement la valeur à utiliser (sans passer par un "System.Object" ce qui posait problème dans mon exemple précédent).

Discussions similaires

  1. Comment créer un type puis l'utiliser dans une méthode ?
    Par montis dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 19/05/2012, 22h48
  2. Réponses: 0
    Dernier message: 29/03/2010, 16h39
  3. utilisation de "LIKE" avec un type datetime dans r
    Par ericmart dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/11/2003, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo