OVH Cloud OVH Cloud

compatibilité VC60 et VC.Net c++ library (MFC / ATL)

57 réponses
Avatar
Vincent Burel
hello

Avec VC.NET , il semble que Microsoft ait modifié pas mal de libraries,
notamment C++ (MFC 70 et ATL) et ait ajouté quelques raffinement au langage
(keyword super / __super par exemple)... qui posent divers problemes de
portage / partage de projet VC.NET - VC 6.0.

Sans compter le fait que VC-Net est conçu pour etre multiplatforme (IA32
IA64 etc...), est-il quand même possible d'envisager une compatibilité
descendante VC 60 sur certains composants : Par exemple d'utiliser MFC 7.0
avec VC 6.0 ?

Vincent Burel
PS : Bonne année.
PS : oui, 2006 sera studieuse

10 réponses

1 2 3 4 5
Avatar
John Deuf
Bertrand Lenoir-Welter :

Ca, ça demande un peu de développement. Parce que tu fais abondamment
référence à l'ISO qui comme son nom l'indique, s'occupe de
standardiser.



Non, pas de standardiser, de normaliser.

Ok, l'API Windows n'est pas un standard puisque c'est du privé. Donc,
quand on programme une appli destinée exclusivement à tourner sous
Windows, on n'a pas à en tenir compte. C'est un point de vue.



Bien sur que si. Meme en restant sous Windows, on peut changer de
compilateur.

A mon avis, peu importe qu'un standard - ou une norme, je sais plus -
soit édictée par l'ISO, l'IEEE ou par une vilaine boîte privée qui
veut gagner des sous avec (qui a commis le format GIF, au fait ?), du
moment que tout le monde s'en sert.



Les organismes de normalisation ne sont pas la pour gagner de l'argent.
Il n'y a pas de royalties sur les normes.
Le format gif n'a rien a voir avec l'ISO.

Plus sérieusement, les décideurs qui se contentent de suivre
frileusement sont nombreux, mais c'est pas leurs produits qui font
boum sur le marché. Plutôt ceux des voisins qui, eux, ont décidé de
prendre quelques risques et casser les académismes.



Avance des arguments, parce que la c'est juste une reflexion de
comptoir.

Press F1. En haut à gauche sur le clavier normalisé.



Et tu vas dire ca au chef de projet ? Mouarf.

Question bête : combien d'entre eux ont déjà mis le nez hors de leur
labo universitaire pour créer un truc qui, tout simplement, se vendait
?



Je dirais, 90% d'entre eux. Mais va sur le forum leur demander.

Si tu veux un exemple, regarde le CV de James Kanze, un des intervenant
les plus reguliers du forum (40 ans de programmtion en industrie) :
http://minilien.com/?9DRbzZWfMN

PS: Il fait aussi partie du comite ISO qui decide de la norme c++.

A quelle norme ISO fais-tu references ?
Que je sache, les fonctions specifiques au systeme Windows sont tout
sauf normalisees.



Là, ça devient surréaliste.

Tu te rends compte de ce que tu écris ?



Et toi ?
Les fonctions windows ne sont pas normalisees, tu peux consulter l'ISO,
l'afnor, l'ansi, le bsi, etc. Tu ne trouveras pas.

Les octets ont été définis par une société privée. L'ASCII a longtemps
été concurrent d'EBCDIC. Le VGA était une idée IBM, etc.



Le C++ a aussi ete developpe par une societe privee (AT&T).

Finalement, la norme, c'est ce qui marche. Peu importe qui la crée.



C'est l'inverse : ca marche parce que c'est une norme. S'il n'y avait
que IBM qui avait pu construire des cartes vga, faute de norme, ce
standard aurait disparu.

Ca permet a ton programme de supporter d'autres langues, comme
l'arabe, le russe...



Pour lesquelles il ne sera jamais compilé. Ca lui fait une belle
jambe.



Tu sais de quoi tu parles ?
Pas besoin de le recompiler.

--
John Deuf
Avatar
Vincent Burel
"John Deuf" wrote in message
news:
Arnold McDonald (AMcD) :

Un exemple trivial, en c++, tu peux desallouer un pointeur NULL en
ecrivant delete(mon_pointeur). Ca, c'est la norme qui l'a decide, et tous
les compilo doivent adopter ce comportement.
Si la norme n'existait pas, comment tu programmerais en sachant qu'un
compilo peut accepter le delete(mon_pointeur) avec un pointeur NULL et que
sur un autre ca causera une operation illegale ? Ca devient ingerable.



La tranche de riette écrit peut être delete(mon_pointeur) les yeux fermé

le programmeur expérimenté écrira plutot :

if (mon_pointeur != NULL) delete(mon_pointeur);
mon_pointeur=NULL;

VB
Avatar
John Deuf
Arnold McDonald (AMcD) :

Laisse tomber. Je me demande s'il sait seulement programmer.



Quand on a plus d'argument sur le fond, on s'attaque a la personne.

<plonk>

--
John Deuf
Avatar
John Deuf
Vincent Burel :

le programmeur expérimenté écrira plutot :

if (mon_pointeur != NULL) delete(mon_pointeur);
mon_pointeur=NULL;



Non.

--
John Deuf
Avatar
Vincent Burel
"John Deuf" wrote in message
news:
Vincent Burel :

> le programmeur expérimenté écrira plutot :
>
> if (mon_pointeur != NULL) delete(mon_pointeur);
> mon_pointeur=NULL;

Non.



si
Avatar
John Deuf
Bertrand Lenoir-Welter :

Je pense qu'on est plus ou moins d'accord. Simplement, je pose en
préalable au respect des normes que c'est pas le problème numero 1
dans un projet.



Tu as une facon bizarre de concevoir la norme. La norme ne doit pas etre
une contrainte incommensurable, la norme c'est juste la definition du
langage.

C'est comme les regles d'orthographes pour le francais. Bien sur, tu
peux ecrire dans un francais qui ne respecte pas l'orthographe, mais tu
n'est pas sur d'etre compris par tout le monde.
Ecrire en bon francais n'est pas une contrainte si c'est fait
directement. C'est pareil pour le C++.

Quand on te demande de programmer en C++, ca sous entend C++ iso. Par le
c++ de visual C++ ou d'un autre compilateur.

Admettons, mais à force d'admettre, on arrive à spéculer les mouches
sur des cas de plus en plus restreints.



Pas du tout. Comment peux-tu etre parfaitement sur que tu n'auras JAMAIS
besoin de sous-traiter ?
En travaillant dans une entreprise, c'est suicidaire.
Quand ton patron voudra faire sous-traiter une partie de ton projet, tu
vas lui dire que tu dois planifier 1000 heures de boulot pour adaper le
code source ? C'est completement irrealiste.
Meme si tu es sur que ca n'arrivera jamais, il faut toujours
l'envisager.

J'ajoute que rien ne m'empêche
de fournir un compilo disparu à un sous-traitant hors licence.



On aura tout lu.

L'éditeur qui a officiellement décidé d'abandonner son compilo sans
assurer sa maintenance et qui me poursuit devant une cour de justice
parce que j'ai été obligé de le prêter à un sous-traitant, il aura
besoin d'un très très bon avocat pour me causer du souci.



Tu expliqueras ca au service juridique de ta boite quand tu auras ete
licensie pour faute grave.

Bon, j'ai acheté le Borland C++ 5.02 OWL en 1997. Borland l'a
abandonné, mais mon projet continue (un peu plus de 323 000 lignes de
code, hein, c'est pas un projet minuscule). J'ai sciemment décidé
d'utiliser OWL pour ne pas avoir à me fader l'encapsulage de l'API et
réinventer la roue. Evidemment, c'est hors normes, et en plus
abandonné par Borland. Tu remarques d'ailleurs que l'API elle-même
contient un certain nombre de trucs "NT only", "XP only", etc. On fait
donc de la norme sur une base système mouvante. Au risque de se tordre
la cheville.

Alors tu fais quoi ? Tu rejettes tout ce qui n'est pas commun à tous
les compilos du marché ? C'est un point de vue certes prudent, mais tu
vas avoir du mal à créer - rapidement - un projet qui marche et se
vend.



Ton exemples sur les OWL montre bien qu'on ne parle pas de la meme
chose.
Je parle de la programmation profesionnelle dans le milieu industriel.
QUEL logiciel professionnel utilise les OWL ou les MFC ? Photoshop ?
Office ? Catia v5 ?

Tous les projets professionnels Windows, quand ils font appel a
l'interface utilisateur, developpent leur propre bibliotheque C++ qui
fait couche avec les API win32 (qui elles, sont la encore au moins pour
10 ans). Et si on developpe pour plusieurs OS, alors on ecrit un
bibliotheque et on se contente de reecrire les fonctions bas niveau
specifiques de chaque systeme.
Certaines bibliotheque de ce type sont utilisees et maintenues depuis 10
ans.

Non. En tant que programmeur professionnel, je dois avant tout
produire du code qui marche et qui comporte les fonctionnalités fixées
dans le cahier des charges (plus celles que les petits génies qui
"décident" auront oublié, et c'est aussi mon métier que de le prévoir
à leur place). La maintenance et la réutilisation sont importantes,
mais ça passe après. En tout cas pour ce qui me concerne.



Bien sur, il faut que ca fonctionne.

J'ai déjà vu du code qui passait et que le client nous renvoyait à la
figure avec des insultes parce que ça marchait pas génial. Que ça soit
programmé selon les normes ou pas, lui, il s'en fout un peu.



Le client, peut-etre. Mais pas ton patron.
Parce que ce coute le plus cher pour une entreprise c'est la main
d'oeuvre, et si tu produis un programme qui n'est pas conforme, ca nuit
a sa reutilisabilite, donc ca coute cher.

Certes. Mais soit il est psychorigide, soit il peut se bouger le cul
pour les apprendre. Quand on m'a bombardé dans des équipes qui
bossaient selon la méthode Truc et le compilo Machin, même si je
connaissais pas, j'ai pas commencé par pousser des cris d'orfraie. Un
programmeur qui ne veut pas toucher un code qui ne cadre pas au
point-virgule près avec ses dogmes et idéaux cosmiques, il reste pas
trois jours dans mon équipe. Je suis pas assez couillon pour m'asseoir
sur les normes, hein, parce qu'en général c'est plutôt du bon sens,
mais faut quand même pas en devenir fondamentaliste. Y'a le bon sens
aussi qui compte.



Tu es a cote du probleme.

Ce qui est de la norme et ce qui ne l'est pas n'est pas evident. Comme
j'ai dis, le C++ est complexe, et le probleme que tu rencontras tombera
evident sur un detail.
Il se produira quand par exemple, la norme exige que une fontion de la
STL renvoie une valeur bien precise, et que ton code renvoie une valeur
indefinie. Et pour deboguer ca, le programmeur qui connait la norme ne
comprendra pas ton code.

De toute façon, pour créer une appli C++ sous Windows, j'ai du mal à
imaginer qu'il y ait une Vérité Unique, ne serait-ce que parce que
l'OS lui-même a évolué et qu'on peut de moins en moins imposer la
version d'OS au client. Mon code tourne toujours de Win95 à XP, NT-4
compris. Je me sers pas des truc spécifiques NT ou XP - et je le
regrette parfois - mais ça devrait t'indiquer que je crache pas sur le
standard pour me jeter sur la première API spécifique venue.



Il faut dissocier le langage lui-meme et l'utilisation des bibliotheque.
Si le C++ que tu ecris est conforme, c'est deja beaucoup mieux pour le
debogage, etc. Apres, le choix de l'utilisation des bibliotheques, c'est
encore un autre probleme.

... et ne marche pas, donc ne se vend pas, donc te laisse sur le
carreau avec ta norme. Va dire au client qui hurle que ton code est
strictement conforme à la norme ISO, juste pour voir sa réaction.



Comme j'ai dis plus haut, le client il s'en fout, mais pas ton patron.

Admettons que pour un projet Windows, tu dois passer 500 heures a coder
une classe de cryptage RSA. Puis 2 ans plus tard, ta boite remporte le
marche pour un autre logiciel qui necessite des fonctions de cryptage
RSA, mais son MacOS. Tu vas dire a ton patron, "on doit repasser 500
heures a reprogrammer la classe qu'on a deja programme il y a 1 an parce
que le code est specifique a vc++" ?
Dans les grosses boite de developpement, on a des milliers de lignes de
codes de toute sorte sous le coude (des string, des algorithmes, des
bibliotheques d'affichage, etc.). Il faut du temps pour produire du code
stable et solide, le vieux code qui a fait ses preuves et toujours
preferable. Et bien sur, ca va avec la norme, du code avec des
specificites de vc++ 1 (des short pointeurs, etc) ne compilerait plus
sous vc++ 7.

--
John Deuf
Avatar
John Deuf
Vincent Burel :

> le programmeur expérimenté écrira plutot :
>
> if (mon_pointeur != NULL) delete(mon_pointeur);
> mon_pointeur=NULL;

Non.



si



Non, c'est du code qu'on ecrit seulement pour les vieux compilo. Pourquoi
mettre un if alors que sans if c'est du code c++ correct.

--
John Deuf
Avatar
Arnold McDonald \(AMcD\)
John Deuf wrote:

Quand on a plus d'argument sur le fond, on s'attaque a la personne.



Je n'attaque pas ta personne. Pour écrire autant d'âneries, t'as pas du
beaucoup coder dans ta vie, c'était une reflexion. Je te vois plus comme
universitaire ou chef de projet que codeur. Cela te blesse ? Tant pis,
désolé.

<plonk>



Mon dieu, c'est terrible. M'en remettrai-je ?

--
Arnold McDonald (AMcD)

http://arnold.mcdonald.free.fr/
Avatar
Vincent Burel
"John Deuf" wrote in message
news:
Vincent Burel :

>> > le programmeur expérimenté écrira plutot :
>> >
>> > if (mon_pointeur != NULL) delete(mon_pointeur);
>> > mon_pointeur=NULL;
>>
>> Non.
>
> si

Non, c'est du code qu'on ecrit seulement pour les vieux compilo. Pourquoi
mettre un if alors que sans if c'est du code c++ correct.



c'est du code qui se veut très compatible, sans ambiguiété pour le compilo
comme pour le programmeur, ce genre d'écriture fait gagner énormément de
temps quand il ya des bugg (notamment du à des effets de bord), parce que
ici on est sur qu'il n'y a pas de problème.

Remarques que beaucoup écrirait :
if (mon_pointeur) delete(mon_pointeur);

Alors là c'est pire, car l'opération logique peut varier d'un compilo à
l'autre (certains compilo ne considère que le bit 0), la valeur du pointeur
null peut ne pas etre ZERO d'un systeme à l'autre.

De manière générale tout code non explicite est à éviter... et le problème
d'une norme, c'est qu'elle a tendance à être utilisé comme un prétexte pour
écrire du code ambigue, dont le sens implicite peut évoluer ou changer sans
préavis. Le programmeur ne peut pas alors garantir la pérénité de son
code... et quand on sait que programmer c'est prévoir et vice versa... .

VB
Avatar
Bertrand Lenoir-Welter
John Deuf :

Tu as une facon bizarre de concevoir la norme. La norme ne doit pas etre
une contrainte incommensurable, la norme c'est juste la definition du
langage.



La définition DE BASE du langage. Avec ce genre d'idée, je sais pas si
l'on parlerait Latin ou Grec ici, mais en tout cas pas Français.

Une norme, c'est un cadre. Si elle est rigide, elle se casse ; si elle
est souple, c'est plus une norme. Tout est dans l'idée qu'on se fait de
l'élasticité.


C'est comme les regles d'orthographes pour le francais. Bien sur, tu
peux ecrire dans un francais qui ne respecte pas l'orthographe, mais tu
n'est pas sur d'etre compris par tout le monde.



Dans ce genre de forum, c'est un drôle d'exemple. On parle un sabir fait
d'un mélange de Français, d'Anglais et truffé de fautes d'orthographes
ou de frappe. Pour autant, tout le monde se comprend parfaitement. On
pourrait s'amuser à appeler des imparfaits du subjonctif pour respecter
les canons académiques, genre "il eût fallu que tu recompilasses", mais
je suis pas sûr que tout le monde comprenne, justement.


Ecrire en bon francais n'est pas une contrainte si c'est fait
directement.



Dont acte.


Quand on te demande de programmer en C++, ca sous entend C++ iso.



Non. Quand "on" te demande à toi, peut-être. Quand "on" me demande à
moi, ça doit pas être le même "on".

Avec des idées comme ça, y'aurait qu'un seul compilo sur le marché.


Pas du tout. Comment peux-tu etre parfaitement sur que tu n'auras JAMAIS
besoin de sous-traiter ?



Disons que ça fait 12 ans que je m'en passe, mais effectivement, je sais
pas non plus si le soleil se lèvera demain pour moi.


En travaillant dans une entreprise, c'est suicidaire.



Ecoute, je suis pas a priori contre les normes, mais là tu dis n'importe
quoi et ça affaiblit beaucoup tes arguments. Reprends-toi.


Quand ton patron voudra faire sous-traiter une partie de ton projet, tu
vas lui dire que tu dois planifier 1000 heures de boulot pour adaper le
code source ? C'est completement irrealiste.



Depuis 12 ans, c'est moi le patron. Et je suis pas suicidaire comme tu
le suggères.


Meme si tu es sur que ca n'arrivera jamais, il faut toujours
l'envisager.



Question piège : tu travailles pour une boîte d'assurance-vie ou t'es
dans un labo universitaire ?


L'éditeur qui a officiellement décidé d'abandonner son compilo sans
assurer sa maintenance et qui me poursuit devant une cour de justice
parce que j'ai été obligé de le prêter à un sous-traitant, il aura
besoin d'un très très bon avocat pour me causer du souci.



Tu expliqueras ca au service juridique de ta boite quand tu auras ete
licensie pour faute grave.



Vas-y, développe. Dis-moi sur quelle base l'éditeur peut me poursuivre
alors qu'il a abandonné son produit et me met en position d'obligation
de ne pas respecter une licence de toute façon éteinte. On voit que tu
plaides pas souvent dans le domaine de la Propriété Intellectuelle. Je
dis pas que je suis un habitué du barreau, mais j'y suis passé plusieurs
fois et je prétends commencer à comprendre comment fonctionne un juge.


Ton exemples sur les OWL montre bien qu'on ne parle pas de la meme
chose.
Je parle de la programmation profesionnelle dans le milieu industriel.



Ben j'en fais partie, tu vois. Et depuis 20 ans.


QUEL logiciel professionnel utilise les OWL ou les MFC ? Photoshop ?
Office ? Catia v5 ?



Pour ce que j'en sais, CorelDraw, PaintShop, SolidWorks et quelques
autres ont utilisé les MFC. Quelle bande d'amateurs !


Tous les projets professionnels Windows, quand ils font appel a
l'interface utilisateur, developpent leur propre bibliotheque C++ qui
fait couche avec les API win32 (qui elles, sont la encore au moins pour
10 ans). Et si on developpe pour plusieurs OS, alors on ecrit un
bibliotheque et on se contente de reecrire les fonctions bas niveau
specifiques de chaque systeme.



Ouais, même que quand c'est fait par un pro, ça s'appelle OWL. CQFD.


Certaines bibliotheque de ce type sont utilisees et maintenues depuis 10
ans.



Dont acte.


Le client, peut-etre. Mais pas ton patron.
Parce que ce coute le plus cher pour une entreprise c'est la main
d'oeuvre, et si tu produis un programme qui n'est pas conforme, ca nuit
a sa reutilisabilite, donc ca coute cher.



Et s'il se vend pas, sûr que ça coûte rien. Ecoute, on tourne en rond,
là. Tu veux me faire dire que la norme est une connerie, et je dis pas
ça. Je me contente de dire que la norme, je la respecte A PEU PRES alors
que tu sembles penser qu'il faut y adhérer à 100% faute de quoi tout
fout le camp.


Tu es a cote du probleme.



Ben voyons. Y'a que toi de clairvoyant ici. Si je suis ton raisonnement,
je suis suicidaire, licencié pour faute grave, poursuivi par Borland et
de toute façon mon code ne sert à rien même s'il marche.

Réfléchis.


Ce qui est de la norme et ce qui ne l'est pas n'est pas evident.



Nous y voilà. On va donc chercher des Docteurs de la Loi qui vont nous
dire comment interpréter la Bible. Non merci.


Il faut dissocier le langage lui-meme et l'utilisation des bibliotheque.



Ah tiens ? Qu'est-ce que tu disais à propos de MFC et OWL ?


Comme j'ai dis plus haut, le client il s'en fout, mais pas ton patron.



J'ai bossé dans 13 boîtes avant d'être à mon compte. J'ai jamais vu un
patron malheureux quand le client était content, ni réciproquement.

Les uns comme les autres devaient être suicidaires, etc.


Admettons que pour un projet Windows, tu dois passer 500 heures a coder
une classe de cryptage RSA. Puis 2 ans plus tard, ta boite remporte le
marche pour un autre logiciel qui necessite des fonctions de cryptage
RSA, mais son MacOS. Tu vas dire a ton patron, "on doit repasser 500
heures a reprogrammer la classe qu'on a deja programme il y a 1 an parce
que le code est specifique a vc++" ?



Je vois que tu t'es trompé de forum. Ici, c'est la programmation Windows
et pas autre chose. N'admets rien, je ne bosse QUE sous Windows et ça
changera pas demain. Alors la portabilité et autres utopies, je la
laisse aux boîtes qui ont envie de donner dans le multiplateforme sans
s'y casser les dents (elles sont pas nombreuses) et aussi aux profs de
fac. J'ai rien contre eux, hein, mais moi je bosse dans le monde réel.

Je pense que t'es resté trop longtemps sur le forum C++. Là, tout le
monde doit être d'accord avec toi et même tu dois passer pour un
anarchiste à employer des gros-mots comme "client", "patron", etc.
Chacun son truc. Ici on parle pas de C++ en tant que langage et norme,
mais de l'API et des astuces qui vont avec.
1 2 3 4 5