Précédent   Forum des professionnels en informatique > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/02/2012, 14h57   #1
Candidat au titre de Membre du Club
 
Homme
Inscription : septembre 2009
Messages : 51
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : Belgique

Informations forums :
Inscription : septembre 2009
Messages : 51
Points : 14
Points : 14
Par défaut Ré-écriture code VB6 -> C++

Bonjour,

Dans le cadre d'un travail, j'ai pour tâche de ré-écrire un programme (codé en VB6) en C++. Autant le dire tout de suite : je rencontre beaucoup de difficultés étant donné que le programme en question n'est pas documenté (il n'y a aucun document d'analyse ou quoi que ce soit, mis à part quelques commentaires par-ci par-là dans le code).

Cependant, la compréhension du code n'est pas encore un trop gros problème (évidemment, ç'aurait été plus facile avec de la documentation). Je dois coder le programme en C++ avec C++ Builder 5 (oui, je vous l'accorde, c'est pas très nouveau tout ça...). J'ai une petite expérience du C++ (j'avais déjà fait pas mal de C et j'avais appris le C++ en autodidacte via des tutoriaux) mais j'ai l'impression qu'avec C++ Builder, tout change ! Ok, la création de la GUI est grandement simplifiée, mais ça ne m'a pas l'air fort standard. Moi qui avait l'habitude des string, voilà que j'apprends que C++ Builder utilise des AnsiString (ou String grâce au typedef) pour tout ce qui touche aux composants.

Bref, je suis un peu perdu devant tous les types de données, les conversions à effectuer etc. Dans le programme en question, par exemple, il y a des conversions de Variant en Double etc... Toutes ces choses-là en C++ ne se font pas aussi aisément qu'en VB (ou alors j'ai loupé un chapitre) et encore moins quand on utilise C++ Builder (dois-je utiliser les AnsiString autant que possible, ou bien les string de la STL et convertir uniquement lorsque je dois afficher dans un composant ?).

En résumé, si quelqu'un a déjà eu à convertir du VB6 (ou VB en général) en C++ et qu'il a recontré les même problèmes que je recontre actuellement, un éclaircissement de sa part serait hautement apprécié.

Merci d'avance.
Tenebrous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 15h39   #2
Membre Expert
 
Avatar de Joel F
 
Homme Joel Falcou
Chercheur en informatique
Inscription : septembre 2002
Messages : 824
Détails du profil
Informations personnelles :
Nom : Homme Joel Falcou
Âge : 32
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Service public

Informations forums :
Inscription : septembre 2002
Messages : 824
Points : 1 650
Points : 1 650
Envoyer un message via MSN à Joel F
Si Variant en VB porte bien son nom, un boost::variant ou boost::any devrait faire l'affaire.

Pour les AnsiString, ca depend des traitemetn effectué dessus
Joel F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/02/2012, 20h33   #3
Candidat au titre de Membre du Club
 
Homme
Inscription : septembre 2009
Messages : 51
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : Belgique

Informations forums :
Inscription : septembre 2009
Messages : 51
Points : 14
Points : 14
Oui, j'avais pensé à utiliser la librairie boost mais je me suis rendu compte que le type Variant existait en C++ (par contre pour les conversions ça a l'air nettement plus compliqué).

Pour les chaînes de caractères, disons que la plupart du temps, je dois effectuer des traitements dessus (en VB c'est des mid, left, instr etc.) sans les afficher dans des composants de la GUI. J'essaie donc d'utiliser au plus le type string de la STL. J'aurais juste aimé savoir ce qui, d'après vous, pourrait me simplifier la vie en vue de la conversion VB -> C++ (à quelque niveau que ce soit).
Tenebrous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 07h14   #4
Membre Expert
 
Avatar de Joel F
 
Homme Joel Falcou
Chercheur en informatique
Inscription : septembre 2002
Messages : 824
Détails du profil
Informations personnelles :
Nom : Homme Joel Falcou
Âge : 32
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Service public

Informations forums :
Inscription : septembre 2002
Messages : 824
Points : 1 650
Points : 1 650
Envoyer un message via MSN à Joel F
Citation:
Envoyé par Tenebrous Voir le message
Oui, j'avais pensé à utiliser la librairie boost mais je me suis rendu compte que le type Variant existait en C++ (par contre pour les conversions ça a l'air nettement plus compliqué).
Je ne pense pas non

Citation:
Envoyé par Tenebrous Voir le message
Pour les chaînes de caractères, disons que la plupart du temps, je dois effectuer des traitements dessus (en VB c'est des mid, left, instr etc.) sans les afficher dans des composants de la GUI. J'essaie donc d'utiliser au plus le type string de la STL. J'aurais juste aimé savoir ce qui, d'après vous, pourrait me simplifier la vie en vue de la conversion VB -> C++ (à quelque niveau que ce soit).
Alors Oui c'ets le mieux.
Joel F est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 12h01   #5
Membre éclairé
 
Avatar de themadmax
 
Inscription : juillet 2005
Messages : 424
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 424
Points : 383
Points : 383
Pourquoi dois tu effectuer cette conversion ? Besoin de performance, obsolescence, interfaçage...
Pourquoi repartir sur du C++ Builder que me parait lui aussi en fin de vie...
Sinon utilise le plus possible les standards, les std::string à la place des AnsiString. Pour ce qui est tu type Variant, la plupart dur temps tu peux les replacer par des déclarations explicites et un peu d'héritage.
__________________
________________________________________________
http://bliquid.fr : Blog sur Android et l'Acer Liquid
themadmax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 10h56   #6
Candidat au titre de Membre du Club
 
Homme
Inscription : septembre 2009
Messages : 51
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : Belgique

Informations forums :
Inscription : septembre 2009
Messages : 51
Points : 14
Points : 14
Principalement pour un gain de performance, en effet.
Cependant, mon travail ne se limite pas à une simple traduction de code, je dois également revoir certains algorithmes utilisés et les optimiser pour un gain encore plus important.

En ce qui concerne C++ Builder, il m'est malheureusement imposé, je n'ai pas le choix...

Sinon, j'aurais une autre question :
J'aimerais connaître l'équivalent des fonctions GetSetting et SaveSetting de VB en C++. Si cela n'existe pas, y a-t-il une alternative ?
J'ai effectué pas mal de recherches sur Internet; sans grand succès (la documentation est très peu présente ou bien pas vraiment détaillée).

Merci d'avance.
Tenebrous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 12h59   #7
Expert Confirmé
 
Avatar de DonQuiche
 
Inscription : septembre 2010
Messages : 1 350
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 350
Points : 2 510
Points : 2 510
Citation:
Envoyé par Tenebrous Voir le message
J'aimerais connaître l'équivalent des fonctions GetSetting et SaveSetting de VB en C++. Si cela n'existe pas, y a-t-il une alternative ?
J'ai effectué pas mal de recherches sur Internet; sans grand succès (la documentation est très peu présente ou bien pas vraiment détaillée).
C'est simplement que tu ne sais pas encore comment chercher, quels sont les bons mots clés à utiliser.
En l'occurrence, tu veux un moyen de lire dans le registre puisque c'est ce que fait GetSetting. Donc : Google("msdn registry api") > MSDN - Registry (1er lien) > Registry reference > Registry functions > RegGetValue
DonQuiche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 13h27   #8
Candidat au titre de Membre du Club
 
Homme
Inscription : septembre 2009
Messages : 51
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : Belgique

Informations forums :
Inscription : septembre 2009
Messages : 51
Points : 14
Points : 14
Ok, merci pour l'info.
Par contre, au risque de paraître un peu "emmerdant", y'a pas quelque chose de plus simple que ça ? Pour leurs homologues VB, 4 paramètres à passer et le tour était joué. Ici, quand je regarde les fonctions, c'est... comment dire... un peu compliqué pour ce que je veux faire.
Tenebrous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h15   #9
Expert Confirmé
 
Avatar de DonQuiche
 
Inscription : septembre 2010
Messages : 1 350
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 350
Points : 2 510
Points : 2 510
Ah ! Ça, c'est une des petites "joies" du C++, presque tout sera toujours plus compliqué qu'avec dotnet. Les API win32 sont faîtes pour la compatibilité C (donc pas d'objet, sauf API COM) et assez bas niveau pour couvrir tous les scénarios, même si quelques fonctions de plus haut niveau pour les tâches auraient été bienvenues.

Donc, non, il n'existe à ma connaissance rien de plus haut niveau, ou alors il faut aller chercher sur le web des biblios tierce-parties (ou peut-être C++ builder a t-il quelque chose pour ça, c'est un peu son but après tout). De toute façon, en C++ tout sera toujours plus long et la productivité en prend un coup, à quelques exceptions près. Parmi celles-ci, par exemple, écrire du code très performant est beaucoup plus simple et rapide en C/C++.
DonQuiche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 08h13   #10
Candidat au titre de Membre du Club
 
Homme
Inscription : septembre 2009
Messages : 51
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : Belgique

Informations forums :
Inscription : septembre 2009
Messages : 51
Points : 14
Points : 14
Ok, merci pour les infos en tout cas.
Si ce n'est pas trop demander, quelqu'un pourrait-il me fournir un petit exemple utilisant ces fonctions ? Simplement la sauvegarde d'un paramètre dans le registre et le récupération de ce dernier (je n'ai pas besoin de plus).


EDIT : J'ai trouvé ça sinon :
http://www.developer.com/net/cplus/article.php/3449721
Ca m'a l'air plus simple à utiliser. Un avis ?
Tenebrous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 10h56   #11
Expert Confirmé
 
Avatar de DonQuiche
 
Inscription : septembre 2010
Messages : 1 350
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 350
Points : 2 510
Points : 2 510
L'article que tu mentionnes est réservé au managed c++, une version spécifique du C++ dédiée à dotnet (et aujourd'hui remplacée par MS par C++/CLI, seule la syntaxe changeant un peu) dans laquelle tu as accès à toute l'API du framework dotnet, comme en VB ou C#.

Non seulement je doute que C++ builder supporte le managed C++ ou le C++/CLI mais cela voudrait aussi dire que ta biblio ne serait accessible qu'aux programmes dotnet, ce qui est sans doute justement ce que l'on veut éviter en te faisant réaliser ce portage.
DonQuiche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 11h49   #12
Candidat au titre de Membre du Club
 
Homme
Inscription : septembre 2009
Messages : 51
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : Belgique

Informations forums :
Inscription : septembre 2009
Messages : 51
Points : 14
Points : 14
Encore une fois, merci pour tes conseils éclairés.
J'ai finalement fini par trouver ce que je cherchais, à savoir comment manipuler le registre avec C++ Builder (tu avais raison, il intègre une classe TRegistry qui simplifie grandement son utilisation).

Cependant, d'après ce que j'ai lu dans mes recherches, il me semble que je pourrais remplacer l'utilisation du registre par un simple fichier de configuration (.ini). Là encore, C++ Builder met à la disposition une classe TIniFile pour permettre la manipulation de ces fichiers.

La question que je me pose est : quels avantages y a-t-il à utiliser un .ini par rapport au registre ? Les deux solutions sont-elles équivalentes ?

Merci d'avance.
Tenebrous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 12h22   #13
Expert Confirmé
 
Avatar de DonQuiche
 
Inscription : septembre 2010
Messages : 1 350
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 350
Points : 2 510
Points : 2 510
Sur la question de la base de registres contre les fichiers de configuration (plutôt XML de nos jours même si un vieux .INI fait l'affaire), ces derniers l'emportent presque toujours : ils sont plus simples à déployer, supprimer et gérer, l'utilisateur peut au besoin aisément et manuellement les éditer (programme qui crashe au démarrage, paramètres cachés sans UI pour les gérer) ou les copier (en cas de migration vers un autre ordinateur l'idéal est d'avoir simplement à copier le dossier utilisateur), c'est une solution portable vers d'autres OS, on trouve de nombreuses API puissantes pour manipuler les XML, etc

Le seul cas où la base de registre présente un avantage c'est dans l'administration de plusieurs comptes utilisateurs : l'administrateur peut définir des clés globales qui seront automatiquement héritées dans le cas où il n'y aurait pas de clé spécifique à l'utilisateur. Accessoirement elle peut aussi être lue et modifiée trivialement par plusieurs threads et processus simultanés même si je me demande s'il existe une API pour gérer ça finement (transactions ou verrous).

Enfin, dans les deux cas, respecte les usages prônés par MS depuis Vista et Seven : fichiers de config dans les dossiers AppData (et non dans le dossier programme) dans un cas, ne pas s'appuyer la virtualisation de certaines opérations de la base de registres dans l'autre cas (le système introduit depuis Vista pour gérer les accès aux clés globales du registre par un utilisateur aux droits restreints).
DonQuiche est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/02/2012, 12h44   #14
Candidat au titre de Membre du Club
 
Homme
Inscription : septembre 2009
Messages : 51
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : Belgique

Informations forums :
Inscription : septembre 2009
Messages : 51
Points : 14
Points : 14
Eh bien, tu es une encyclopédie vivante dis-moi !
Merci pour les renseignements (j'ai l'impression de me répéter ^^).

Je laisse cette discussion ouverte car j'aurai sans doute encore des questions à poser par la suite, au fur et à mesure de mon avancement dans le projet.
Tenebrous est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 12h50   #15
Expert Confirmé
 
Avatar de DonQuiche
 
Inscription : septembre 2010
Messages : 1 350
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 350
Points : 2 510
Points : 2 510
Citation:
Envoyé par Tenebrous Voir le message
Eh bien, tu es une encyclopédie vivante dis-moi !
Hélas, non. Mais la force de l'expérience apparaît tout de même.
Content d'avoir pu t'aider.
DonQuiche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 15h49   #16
Membre éprouvé
 
Homme Eric
Inscription : décembre 2010
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Eric
Localisation : France

Informations forums :
Inscription : décembre 2010
Messages : 254
Points : 450
Points : 450
Citation:
Envoyé par Tenebrous Voir le message
Je laisse cette discussion ouverte car j'aurai sans doute encore des questions à poser par la suite, au fur et à mesure de mon avancement dans le projet.
Sans vouloir jouer les rabat-joie, je te conseille plutôt un thread par problème car ce sera plus visible et compréhensible , d'où plus de possibilités de réponse.
bon courage
therwald est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h03.


 
 
 
 
Partenaires

Hébergement Web