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 :

Conversion d'un VB6 en C#


Sujet :

C#

  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut Conversion d'un VB6 en C#
    bonjour, j'ai vraiment du mal à convertir une méthode qui avait été écrite en Vb6 pour la mettre en C#.net

    Après plusieurs recherche et avoir utilisé un site de conversion qui me donnait plein d'erreur, je solicite votre aide.

    Voici le code en VB6:
    Code : 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
    20
    21
    22
    23
    24
     
    Public Function Supervision1(ByVal bit As Integer, ByVal indice As Integer) As Integer
            Dim nbc As Integer
            Dim line As String
            Dim Str As String
            Dim nbByte As Integer
            Dim i As Integer
            Dim Start As Integer
            Dim nval As Long
            Dim Oct As Integer
            Dim Rank As Integer
            On Error Resume Next
            Rank = indice
            nbc = Len(bit) Mod 2
            'Mise au format &Hxx -> on complète par 0 si besoin
            Str = IIf(nbc = 1, "0" & bit, bit)
            While Rank <= 31 And Len(Str) >= 8
                Str = Mid(Str, Len(Str) - 4)
                Rank = Rank - 16
            End While
            nval = Val("&H" & Str)
            i = Val(Str And CStr(Hex(2 ^ Rank)))
            Supervision1= IIf((nval And 2 ^ Rank) > 0, 1, 0)
        End Function
    J'arrive pas à trouver l'équivalent de:
    Len
    et la mise au format Hex.


    Merci de votre aide

  2. #2
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Une petite astuce que j'ai trouvé tout dernièrement :
    1 ouvrir un nouveau projet VB (aaaatchoum ! Santé !)
    2 copier ta fonction dans ce projet (différentes corrections vont déjà être effectuées)
    3 éventuellement compiler et corriger
    4 reprendre le code et le passer à la moulinette...
    5 finir de corriger le code dans c#

    Comme moulinette j'utilise Econ NetVert.

    Évidemment un fonction comme len ne passera pas mais il y a des équivalents :
    - pour un string : maString.Length
    - pour un tableau idem
    - etc...

  3. #3
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Il existe des convertisseurs en ligne VB.Net <=> C#. VB et VB.Net ne sont pas le même langage, mais leur syntaxe étant proche et ton bout de code étant relativement simple, ça vaut la peine d'essayer.

  4. #4
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Merci pour vos réponses:

    J'ai utilisé le site http://www.developerfusion.com/tools.../vb-to-csharp/

    Il me trouve pas mal d'erreurs, des fonctions qu'il ne sais pas traduire et ce qu'il a converti ne correspond plus. Par exemple
    Len(bit) bit etant un integer

    il me le converti par Strings.Len(bit)

    Auriez vous d'autre site de conversion, mais je vais cherché aussi de mon coté.

  5. #5
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    J'avoue que j'ai du mal à voir ce que voulait celui qui a crée la méthode en Vb6

    Pour:

    Len(bit)

    Dans l'aide de Visual il indique que la méthode Len :Retourne un entier contenant le nombre de caractères contenus dans une chaîne ou le nombre nominal d'octets requis pour stocker une variable.

    il parle d'une chaine effectivement ou le nombre nominal d'octets.

    Vu que "bit" est un integer on a pas le nombre d'une chaine..!!

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    A ta place, j'irais poser la question sur le forum VB, où tu trouveras plein de gens plus compétent qu'ici dans ce domaine

  7. #7
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Comme VB fait à peu près n'importe quoi :
    len(sting) = longueur chaine
    len(array) = taille tableau
    len(integer) = nombre de byte d'un integer soit 2
    len(long) = nombre de byte d'un long soit 4

    A part ça, j'en reviens à ma théorie d'avant :
    copier du vb6 dans un projet vbnet permet déjà de corriger pas ma d'inepties du vb6...

  8. #8
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Un peut d'explication:

    J'ai déjà intégré cette solution dans mon entreprise pendant mes stages je développait en VB.net mais le fichier d'origine etait bien du VB6. J'ai pas souvenir d'avoir adapter quelque chose et le code que que je vous est donné proviens de mon VB.net.

    Au lycée (je suis en formation de reconversion) pour mon BTS IRIS, apparemment mon prof préférait que l'on face se même projet en C#. En faite, j'ai amené le projet de mon entreprise au lycée et il va me servir pour le BTS.

    Si non revenant à nos moutons.

    Si je comprend bien, la fonction reviens à nous donner la taille d'un integer donc 2. Si l'on avais mis 2 directement est-ce que cela change quelque chose?

  9. #9
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Question posée a 13h55
    Dernière réponse 19h54

    = 8h de polémiques
    + le temps passé avant

    24 lignes de code a traduire

    5 minutes a la main, j'y suis presque mais il y a des truc qui me semblent bizares :

    1- Bit est passé comme integer mais semble traité comme string
    2- Qu'est sencé faire exactement cette fonction qui mélange alegrement du decimal de l'hexa et du string ?

    Il me semblerait presque plus pertinent de la réécrire completement car le code me semble un peu ouf !

    Mais bon en 5 minutes, j'ai pas bien tout compris
    J'ai provisoirement laissé des commentaire en attendant de bien comprendre


    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
        public int Supervision1(int bit, int indice)
        {
          int nbc;
          string line;
          string Str;
          int nbByte;// As Integer
          int i;// As Integer
          int Start;// As Integer
          int nval;// As Long
          int Oct;// As Integer
          int Rank;// As Integer
     
          // On Error Resume Next
          Rank = indice;
          //  nbc = Len(bit) Mod 2;
          // Mise au format &Hxx -> on complète par 0 si besoin
          string dum = bit.ToString();
          Str = (nbc == 1) ? "0" + dum : dum;
     
          while (Rank <= 31 && Str.Length >= 8)
          {
            Str = Str.Substring(Str.Length - 4);
            Rank = Rank - 16;
          }
          // nval = Val("&H" + Str);
          //  i = Val(Str And CStr(Hex(2 ^ Rank)));
          // return ((nval && 2 ^ Rank) > 0) ? 1 : 0;
          return 0;
        }

  10. #10
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    +1 pour une réécriture

    Je suis pas sur de tout avoir compris au bout de code, mais, en enlevant les lignes inutilisées, ca ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static int Supervision1(int bit, int indice){	
      string hexValue = bit.ToString("00"); // ajoute un 0 en début de chaine si nécessaire		
      while (indice <= 31 && hexValue.Length >= 8){
        hexValue = hexValue.Substring(hexValue.Length - 4);
        indice -=16;
      }
      int nval = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber); // conversion de la valeur hexa en int
      return (nval & (int)Math.Pow(2, indice)) > 0 ? 1 : 0; // Et logique entre la valeur hexa et 2 puissance indice
    }
    Après, je ne sais pas ce que ca doit retourner, si tu as des valeurs de test entrées et sorties a proposer

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  11. #11
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonsoir,

    Merci de vous donner cette peine, comme j'ai dit j'ai pas inventer cette fonction et vu que j'ai fait un copier coller j'ai pas chercher plus loin vu que sa marchait.

    Je viens de vérifier le code que j'ai fait en VB.net. Je lui envoie bien un integer.

    Au niveau du fonctionnement on interroge la supervision qui nous renvoie une chaine de caractère (string). Cette chaine contient plusieurs partie séparer par des / donc je vais un petit split la dessus puis grâce à un indice que je connait(dans mon fichier de paramettre en XML) je vais chercher dans mon tableau de string le paramettre que j'ai besoin.

    Pour les mesures par exemple c'est pas bien compliquer, le string est 5400 pour indiquer que j'ai 54 volt. Par contre pour l'état des alarmes il me revoie un code et la fonction que nous embête ici sert a décompose se code qui est le fameux "bit" et ce que je veux récupérer, c'est l'état du bit qui est designer par l'indice.

    Je pensais pas qu'il y aurai de gosse difficulter la dessus mais j'ai pas mal chercher pour le moment a trouver l'équivalent en C# du code sans vraiment cherche à comprendre ce que l'on cherchait à faire et comment le faire.

  12. #12
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Je vais essayé ce week end de simuler tout sa pour voir ce que me renvoie exactement la supervision. Mais je travaille avec un simulateur et apparemment il renvoie pas exactement ce que renvoie la vrais supervision. C'est a dire que la vrais envoie tout les bites même s'il sont à 0 alors que le simulateur envoie que les valeur à 1. Mais cela marche quand même, un peut normale vu que m'a chaine je la transforme en integer. Si la supervision m'envoie 00001000. Si le simulateur m'envoie que 1000, cela va pas changer grand chose.

    Je vous tient au courant dès que j'ai fait des tests complémentaires. Mais demain j'ai pas info et vendredi j'ai un BTS blanc de 6 heures en info donc vous comprendrais que demain soir je vais réviser à fond. Je regarderais aussi dans le peut de doc que j'ai si je peut trouver quelque choses.


    En tout cas merci

  13. #13
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Quand je te parlais de test, c'est juste savoir si tu peux donner quelques triplets bit/indice/résultat attendu de ta fonction

    Par contre, je ne vois toujours pas ce que tu dois faire avec, mais ca sera probablement plus clair avec des exemples

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  14. #14
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Après quelques tests et recherches, je pense avoir percé le mystère de cette fonction.

    En fait elle sert à déterminer la valeur du bit à la position indiquée (paramètre indice) du nombre (paramètre bits) dans sa représentation binaire.

    Exemples:
    • Supervision1(4, 0) = 0
    • Supervision1(4, 1) = 0
    • Supervision1(4, 2) = 1
    • Supervision1(4, 3) = 0
    • Supervision1(7, 0) = 1
    • Supervision1(7, 1) = 1
    • Supervision1(7, 2) = 1
    • Supervision1(7, 3) = 0


    En effet 4 en binaire s'écrit 100 (ou 0100) et 7 s'écrie 111 (ou 0111).

    Pour ce qui est de la conversion, rien de plus simple une fois que l'on sait ce que l'on doit faire .

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private int ValeurBitNombre(int nombre, int positionBit)
    {
        //Gestion des execptions
        if (positionBit < 0) throw new ArgumentOutOfRangeException("positionBit", positionBit, "doit être supérieur ou égal à 0.");
     
        return (nombre >> positionBit) & 1;
    }

  15. #15
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Bonjour à tous,
    je vous remercie vraiment pour votre aide, et votre ténacité, comme je vous ai dit je vais regardé sa de plus près ce week end ou vendredi soir si je me suis pas planter à l'exam

    Si non je pense effectivement que c'est sa "Sehnsucht" mais vu qu'avec m'a fonction en vb.net cela à marché du 1er coup j'ai pas regardé exactement ce que j'avais en entré et comment cela se découpait. De plus pour effectuer la simulation grâce au simulateur de supervision, pour crée un défaut sur l'un des état, ont a un tableau et on indique juste le numéro d'alarme. Le simulateur doit mouliner aussi tout sa pour recrée une trame bonne mais la saisie manuel ne représente pas du coup l'exacte trame de sortie.

    Dans tout les cas je vous remercie encore fortement et je suis vraiment désoler de ne pas pouvoir apporté plus de détaille, je pensais pas être aussi bloquer avec cette fonction, pensant qu'une simple conversion toute bête aurait suffit j'ai pas poussé plus loin l'analyse.

    je vous tient au courant, aller.. vendredi soir... je vais le réussir cet examen...

  16. #16
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    pensant qu'une simple conversion toute bête aurait suffit j'ai pas poussé plus loin l'analyse.
    Si tu veut progresser et réussir c'est vraiment l'erreur a ne pas faire !
    Il faut toujours pousser l'analyse !

    Avec les question en tête

    - Qu'est ce que ca doit faire ?
    - Qu'est ce que j'ai en main pour le faire ?
    - Quelle peut être la méthode la plus simple et rapide ?

  17. #17
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par olibara
    Si tu veut progresser et réussir c'est vraiment l'erreur a ne pas faire !
    +1

    Citation Envoyé par megamario
    je vous tient au courant, aller.. vendredi soir... je vais le réussir cet examen...
    Bonne chance, en tout cas

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  18. #18
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private int ValeurBitNombre(int nombre, int positionBit)
    {
        //Gestion des execptions
        if (positionBit < 0) throw new ArgumentOutOfRangeException("positionBit", positionBit, "doit être supérieur ou égal à 0.");
     
        return (nombre >> positionBit) & 1;
    }

    Il m'est arrivé un certain nombre de fois de simplifier un code source obscurci (passer de 5000 à 2000 lignes, mon record ), mais là tu bats tous les records, chapeau !

  19. #19
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Je viens de demander directement au concepteur de la méthode ce qu'elle devait faire exactement. j'attend sa réponse.

    Bon ba j'y retourne...

    C'est vraiment dur de se remettre aux études à près de 40 ballets

  20. #20
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Une chose qui me perturbe asser dans sa methode, c'est ceci


    nbc = Len(bit) Mod 2
    Or bit est un integer, je me demande donc ce que donne Len(bit)

    A moins que cet espece de #! de VB fasse un genre de Tostring() implicite

Discussions similaires

  1. Conversion MsFlexGrid de VB6 vers VB.net
    Par megamario dans le forum VB.NET
    Réponses: 4
    Dernier message: 19/11/2013, 07h15
  2. Conversion taille fenêtre VB6>VB2010
    Par gaiac dans le forum Visual Studio
    Réponses: 1
    Dernier message: 29/05/2013, 20h58
  3. Conversion de Code Vb6 en VB.Net
    Par mr.net dans le forum VB.NET
    Réponses: 11
    Dernier message: 08/10/2010, 22h06
  4. conversion de code VB6 en PHP
    Par Illuminati dans le forum Langage
    Réponses: 2
    Dernier message: 06/05/2010, 20h28

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