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

C# Discussion :

[C#] Vérification de code.


Sujet :

C#

  1. #1
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut [C#] Vérification de code.
    Bonjour,

    J'utilise une library qui propose une méthode dont la signature est la suivante:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void SyncWrite(int NumItems, ref System.Array ServerHandles, ref System.Array Values, out System.Array Errors)

    Pourriez-vous me dire si le code suivant est valide ?

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Array hServer = Array.CreateInstance(typeof(object),5);
    
    hServer.SetValue(10,0);
    hServer.SetValue(11,1);
    hServer.SetValue(12,2);
    hServer.SetValue(13,3);
    hServer.SetValue(14,4);
    
    Array values = Array.CreateInstance(typeof(object),5);
    values.SetValue(424,0);
    values.SetValue(421,1);
    values.SetValue(424,2);
    values.SetValue(421,3);
    values.SetValue(429,4);
    
    Array err = Array.CreateInstance(typeof(object),5);
    
    SyncWrite(5,ref hServer,ref values, out err);

    Merci pour votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Par défaut
    Outre le fait que l'on a pas d'indication sur le contenu attendu des tableaux, il y a une erreur de logique.
    En effet, le paramètre Errors étant en out, la méthode n'a pas à recevoir une variable assignée non nulle. Néanmoins, le compilateur considère le passage par out comme une utilisation de la variable et celle-ci doit être initialisée. Un simple null suffit amplement.

    Une remarque globale sur le code, on peut simplifier grandement l'écriture et donc la rendre plus lisible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    object[] hServer = new object[5]; // object[] est bien un System.Array
    hServer[0] = 10;
    hServer[0] = 11;
    ou encore plus concis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    object[] hServer = new object[]{10, 11, 12, 13, 14, 15};
    Au retour, les objets peuvent avoir possiblement changé de "cible", donc ne plus représenté le même tableau passé en paramètre. Autrement dit après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    object[] a = new object[1];
    object[] b = new object[1];
    object[] e = new object[1];
    object[] z = a;
     
    SyncWrite(a.Length, ref a,ref b, out e);
    rien ne garantit que a[0] = z[0] qui pourtant était strictement identique avant l'appel.

    En espérant que cela apporte quelques éclaircissements.

  3. #3
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut
    Hello,

    je te remercie bien pour cette réponse.

    Citation Envoyé par cortex93
    object[] hServer = new object[5]; // object[] est bien un System.Array
    hServer[0] = 10;
    hServer[0] = 11;
    J'avais essayé ceci mais j'ai une erreur de compilation.

    Impossible de convertir de 'ref object[]' en 'ref System.Array'

    Citation Envoyé par cortex93
    Outre le fait que l'on a pas d'indication sur le contenu attendu des tableaux
    En fait le tableau hServer est un tableau de long.
    Le tableau Values est un tableau de 4 int.
    Et le tableau Errors est un tableau d'objet.

    La méthode SyncWrite est la méthode d'un objet COM.

    Merci

  4. #4
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut
    Petite précision qui a son importance.
    Je viens de m'apercevoir que les tableaux passés en paramètres sont 1-indexés.

    J'ai donc déclarer mes tableaux avec la méthode:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    Array.CreateInstance(Type type,int[] lengths,int[] lowerBounds);

    Mais j'ai toujours l'exception suivante qui est levé:

    System.Runtime.InteropServices.SafeArrayTypeMismatchException
    Merci de votre aide.

  5. #5
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut
    Et bien j'ai résolu mon problème il s'agissait d'un truc très con.
    Je n'employais pas le bon type sur mon tableau hServer.

    C'est à dire que je faisais ceci:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Array hServer = new object[5];
    au lieu de:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    Array hServer = new int[5];

    Je pensais que j'avais fait une erreur dans l'initialisation de mes tableaux Array, d'où ce message mais l'erreur venait d'un mauvais passage de paramètres de la méthode SyncWrite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ZF 1.10] Petite vérification du code
    Par Sereine dans le forum Zend Framework
    Réponses: 4
    Dernier message: 25/09/2012, 11h14
  2. Vérification de code
    Par BenoitM dans le forum Débuter
    Réponses: 5
    Dernier message: 14/07/2011, 08h17
  3. [FB3] Plugin de vérification de code
    Par Maskime dans le forum Flex
    Réponses: 1
    Dernier message: 22/10/2010, 16h45
  4. Besoin de vérification de code VBA
    Par cedill23 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/07/2009, 17h25
  5. Vérification du Code SQL
    Par halim-aman dans le forum Persistance des données
    Réponses: 2
    Dernier message: 21/04/2008, 00h08

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