OVH Cloud OVH Cloud

lib win32 C++, bibliotheques disponibles

48 réponses
Avatar
dom
Bonjour,

Pour utiliser les fonctions systeme windows comme les sockets, les
timers, les threads, enfin ce genre de chose en utilisant C++, existe t
il d autres bibliotheques que la win32, la MFC et l OWL ?

Merci

10 réponses

1 2 3 4 5
Avatar
Vincent Burel
"Aurélien REGAT-BARREL" wrote in message
news:41a73136$0$6715$
> On n'est pas tordu du tout, c'est assez évident si tu veux
> bien examiner les APIs en question et l'ensemble qu'elles
> forment. Il faut quand même remarquer que cette mécanique
> est en place depuis plus d'une quinzaine d'année au moins,
> ne t'imagines pas avoir fait là une grande découverte :-)

Au fait, aurais-tu des liens vers des articles ayant cette approche de


Win32
? Je m'étonne de ne jamais en avoir croisé (c'est ce qui me motive à en
écrire un).




Notons tout de même, que la programmation OO (orienté objet) existe depuis
plus longtemps que le langage C++ qui à commencé à devenir populaire auprès
des professionnels du développement qu'au début des années 90, et encore.

Notons aussi que le C++, comme le Turbo Pascal Objet (je ne sais plus
comment qu'il s'appellait), sont des restrictions formelles de concept de
programmation éprouvés depuis des décennies. Je l'ai bien répéter 100 fois
ici ou ailleurs sur le usenet, les langages objets proposent une méthode de
programmation et une organisation du code, mais n'inventent rien en terme de
concept. L'intérêt du ++ c'est le formalisme, et le fait de jouir d'un
carcan de programmation rigoureux pour certain, limitant pour d'autre.

Parler aujourd'hui de l'API Win32, en montrant le côté orienté object de
l'ensemble, c'est tourner en rond. Les concept de programmations OO mis en
oeuvre, pour la plupart par Xerox dans les années 70, ont été utilisé
pendant 20 ans sans C++ , par Apple comme par Microsoft... pour citer que
ceux là.

VB
Avatar
Aurélien REGAT-BARREL
> Parler aujourd'hui de l'API Win32, en montrant le côté orienté object de
l'ensemble, c'est tourner en rond. Les concept de programmations OO mis en
oeuvre, pour la plupart par Xerox dans les années 70, ont été utilisé
pendant 20 ans sans C++ , par Apple comme par Microsoft... pour citer que
ceux là.



Justement, c'est parce que ça n'a rien de nouveau et parce que beaucoup de
monde pense que .Net c'est la révolution de la nouveauté innovatrice que je
veux faire un petit article qui illustre ces principes dans la bonne vieille
API Win32, et partant de là je pense enuite prolonger avec .Net en faisant
une étude de son mapping sur Win32.

--
Aurélien REGAT-BARREL
Avatar
Vincent Burel
"Aurélien REGAT-BARREL" wrote in message
news:41a73c12$0$6724$
> Parler aujourd'hui de l'API Win32, en montrant le côté orienté object de
> l'ensemble, c'est tourner en rond. Les concept de programmations OO mis


en
> oeuvre, pour la plupart par Xerox dans les années 70, ont été utilisé
> pendant 20 ans sans C++ , par Apple comme par Microsoft... pour citer


que
> ceux là.

Justement, c'est parce que ça n'a rien de nouveau et parce que beaucoup de
monde pense que .Net c'est la révolution de la nouveauté innovatrice que


je
veux faire un petit article qui illustre ces principes dans la bonne


vieille
API Win32, et partant de là je pense enuite prolonger avec .Net en faisant
une étude de son mapping sur Win32.



ha, je ne savais pas que certains pensaient que .Net c'était la
révolution...

ceci dit, je vous conseil aussi la lecture aussi du COM CookBook qui définit
l'architecture OO COM Microsoft en "C", c'était déjà conceptuellement un
cran au dessus que le ++... car plus flexible...

VB
Avatar
Loïc Joly
Vincent Burel wrote:
ceci dit, je vous conseil aussi la lecture aussi du COM CookBook qui définit
l'architecture OO COM Microsoft en "C", c'était déjà conceptuellement un
cran au dessus que le ++... car plus flexible...



C'est un point que j'ai du mal à apprécier. J'ai l'impression que le
seul avantage de l'architecture objet COM sur l'architecture objet C++
est que Microsoft a développer des implémentations de cette architecture
pour plusieurs langages. Je serais heureux de découvrir que je me
trompe, ma connaissance de COM est récente, et donc limitée. Aurais tu
quelques exemples ?

--
Loïc
Avatar
Vincent Burel
"Loïc Joly" wrote in message
news:41a78f70$0$16330$
Vincent Burel wrote:
> ceci dit, je vous conseil aussi la lecture aussi du COM CookBook qui


définit
> l'architecture OO COM Microsoft en "C", c'était déjà conceptuellement un
> cran au dessus que le ++... car plus flexible...

C'est un point que j'ai du mal à apprécier. J'ai l'impression que le
seul avantage de l'architecture objet COM sur l'architecture objet C++
est que Microsoft a développer des implémentations de cette architecture
pour plusieurs langages. Je serais heureux de découvrir que je me
trompe, ma connaissance de COM est récente, et donc limitée. Aurais tu
quelques exemples ?



COM c'est d'abord une structure d'objet standardisé, avec un protocole
d'appel standardisé, et une orientation client/serveur dans le sens ou
chaque objet est perçu comme un fournisseur de service (un objet tout
betement), à un programme client qui profite de ces services à travers des
interfaces logiciels (table de méthode). Certains langage ce sont adapté
pour pouvoir faire des objets compatible COM, le C++ de Microsoft est un
exemple.

Vous trouverez plein de topo sur le model COM, celui-ci de Microsoft est une
référence :
The COM Programmer's Cookbook
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncomg/html/msdn_com_co.asp
où y'a concrètement des exemple 'C' et 'C++' comparé.

Ceci dit, COM n'est pas une panassé, mais il faut avoué que c'est du C++
avant l'heure...
comme beaucoup d'autre architecture, que les programmeurs se sont construit
dans les années 80,90 en Pascal ou C et qui peuvent être similaire. L'atout
majeur de COM reste son orientation vers la communication , c'est à dire
plus de donnée que de fonction, que de code. le C++ c'est un peu l'inverse :
trop, trop de fonction... à dégouter de faire justement du polymorphisme
:-), et c'est pourquoi personnellement je suis resté au "C".

La faille majeure du l'architecture COM est que la destruction est pas très
clairement établie... et entre les collections d'objet gérés par un FACTORY
CLASS et les divers RELEASE d'interface, y'a de quoi se mélanger les
pinceaux, et dans la pratique beaucoup de programmeur se sont fourvoyé ici,
et beaucoup d'objet COM ne respecte pas exactement le standart...

VB
Avatar
Loïc Joly
Vincent Burel wrote:
"Loïc Joly" wrote in message



C'est un point que j'ai du mal à apprécier. J'ai l'impression que le
seul avantage de l'architecture objet COM sur l'architecture objet C++
est que Microsoft a développer des implémentations de cette architecture
pour plusieurs langages. Je serais heureux de découvrir que je me
trompe, ma connaissance de COM est récente, et donc limitée. Aurais tu
quelques exemples ?




COM c'est d'abord une structure d'objet standardisé, avec un protocole
d'appel standardisé, et une orientation client/serveur dans le sens ou
chaque objet est perçu comme un fournisseur de service (un objet tout
betement), à un programme client qui profite de ces services à travers des
interfaces logiciels (table de méthode). Certains langage ce sont adapté
pour pouvoir faire des objets compatible COM, le C++ de Microsoft est un
exemple.



Compatibles, mais dans la douleur (même si à ce que j'ai compris les ATL
améliorent la situation).

Vous trouverez plein de topo sur le model COM, celui-ci de Microsoft est une
référence :
The COM Programmer's Cookbook
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncomg/html/msdn_com_co.asp
où y'a concrètement des exemple 'C' et 'C++' comparé.



Ok, merci, je vais regarder ça. J'espère y comprendre pourquoi ils ont
redéveloppé un modèle objet, plutôt que de normaliser l'ABI d'un modèle
objet existant.


Ceci dit, COM n'est pas une panassé, mais il faut avoué que c'est du C++
avant l'heure...



Euh, le C++ date de 83, COM de 95 (ou selon ce qu'on compte comme date
de début, 79 et 93). Donc le côté avant l'heure, j'y crois pas trop...


comme beaucoup d'autre architecture, que les programmeurs se sont construit
dans les années 80,90 en Pascal ou C et qui peuvent être similaire.



Ce que j'ai du mal à comprendre c'est pourquoi, malgré son arrivée
tardive, n'a-t-il pas plus essayé de s'intégrer dans l'un des nombreux
existants au moins. Je suppose que c'est parce que l'existant avait des
défauts et qu'il n'était pas envisageable de le faire évoluer. En fait,
je viens de lire http://en.wikipedia.org/wiki/Software_componentry et
dans le chapitre "Differences between Object Oriented Programming and
Software Components", je me rend compte que je suis du côté de ceux qui
n'y voient pas vraiment de différences, autres qu'historiques.

L'atout
majeur de COM reste son orientation vers la communication , c'est à dire
plus de donnée que de fonction, que de code. le C++ c'est un peu l'inverse :
trop, trop de fonction... à dégouter de faire justement du polymorphisme
:-), et c'est pourquoi personnellement je suis resté au "C".



Euh, désolé, là j'ai pas compris ce que tu voulais dire...


La faille majeure du l'architecture COM est que la destruction est pas très
clairement établie... et entre les collections d'objet gérés par un FACTORY
CLASS et les divers RELEASE d'interface, y'a de quoi se mélanger les
pinceaux, et dans la pratique beaucoup de programmeur se sont fourvoyé ici,
et beaucoup d'objet COM ne respecte pas exactement le standart...




--
Loïc
Avatar
Vincent Burel
"Loïc Joly" wrote in message
news:41a7b793$0$16348$
Vincent Burel wrote:
> "Loïc Joly" wrote in message

Compatibles, mais dans la douleur (même si à ce que j'ai compris les ATL
améliorent la situation).



la compatibilité, c'est toujours dans une certaine douleur.

Ok, merci, je vais regarder ça. J'espère y comprendre pourquoi ils ont
redéveloppé un modèle objet, plutôt que de normaliser l'ABI d'un modèle
objet existant.



Y'a des différences, philosophique notamment. L'idée de multi interface sur
un objet par exemple, l'idée d'objet server, et de programme client, pouvant
être étendu à celle de client/server réseaux...

Euh, le C++ date de 83, COM de 95 (ou selon ce qu'on compte comme date
de début, 79 et 93). Donc le côté avant l'heure, j'y crois pas trop...



oulah , le document date de 95, attention. le concept doit être bien plus
vieux, et son formalisme en "C" au sein de Microsoft aussi, Des composant
objet étaient déjà présent sur Win 3.11 (notamment dans le pack office)...

Ce que j'ai du mal à comprendre c'est pourquoi, malgré son arrivée
tardive, n'a-t-il pas plus essayé de s'intégrer dans l'un des nombreux
existants au moins. Je suppose que c'est parce que l'existant avait des
défauts et qu'il n'était pas envisageable de le faire évoluer. En fait,
je viens de lire http://en.wikipedia.org/wiki/Software_componentry et
dans le chapitre "Differences between Object Oriented Programming and
Software Components", je me rend compte que je suis du côté de ceux qui
n'y voient pas vraiment de différences, autres qu'historiques.



s'intégrer dans qqc d'existant, ca veux dire respecter certaines contrainte,
et faire des concessions... Dans l'industrie, une boite peut choisir d'être
indépendente dans la définition d'une technologie, d'une organization, pour
des raisons très pragmatiques, opérationnelles, efficientes... ET puis y'a
ceux qui conceptualisent, et y'a ceux qui fabriquent. Les premiers sont dans
des trips sans fin souvent, les second disent "stop, ca me suffit, je vais
faire qqc avec ca"... et c'est ensuite, par la pratique ou le principe de
réalité, qu'une technologie prend le pas sur une autre, parce que plus
usité, plus diffusée... plus simple, mieux comprise, dôté de meilleur
outils... tout compte...


Euh, désolé, là j'ai pas compris ce que tu voulais dire...



je voulais dire que le problème du "C++" pour le programmeur, c'est de
croire que tout est objet, et qu'il n'y a plus de donnée réellement. (ca
fait partie du débat précédent NEW vs MALLOC). Ce qui fait qu'en C++ les
programmeur n'ont jamais autant pisser de ligne, et définit autant de
fonctions (méthode). L'objet COM, philosophiquement, fait une différence
plus nette entre l'objet (une class, une structure), et son port de
communication (son interface = ces méthodes). En C++ l'objet c'est un
monolithe DATA+METHOD, COM définit un objet comme une boite noir qui fait
qqc, et un ensemble d'interface que l'on peut demander par un QueryInterface
pour manoeuvrer cet objet d'une manière ou d'une autre... c'est pas la même
approche.

VB
Avatar
Loïc Joly
Vincent Burel wrote:
"Loïc Joly" wrote in message
news:41a7b793$0$16348$

Vincent Burel wrote:

"Loïc Joly" wrote in message



Compatibles, mais dans la douleur (même si à ce que j'ai compris les ATL
améliorent la situation).




la compatibilité, c'est toujours dans une certaine douleur.


Ok, merci, je vais regarder ça. J'espère y comprendre pourquoi ils ont
redéveloppé un modèle objet, plutôt que de normaliser l'ABI d'un modèle
objet existant.




Y'a des différences, philosophique notamment. L'idée de multi interface sur
un objet par exemple,



Ce qui est la même philosophie que l'héritage multiple en C++, et même
les langages comme Java ont repris des bouts d'héritage multiple limités
pour permettre un objet multi-interface.

l'idée d'objet server, et de programme client, pouvant
être étendu à celle de client/server réseaux...





Je trouve effectivement dommage que personne n'ait indroduit les
fonctionnalités DCOM dans le C++.


Euh, le C++ date de 83, COM de 95 (ou selon ce qu'on compte comme date
de début, 79 et 93). Donc le côté avant l'heure, j'y crois pas trop...




oulah , le document date de 95, attention. le concept doit être bien plus
vieux, et son formalisme en "C" au sein de Microsoft aussi, Des composant
objet étaient déjà présent sur Win 3.11 (notamment dans le pack office)...




Si tu parles de OLE, ça date de 91. Et windows 3.11 date lui de 93. Dans
les deux cas, le concepts est postérieurs à C++ (CFront en était à la
version 3, les templates et exceptions existaient déjà, et le processus
de normalisation était en cours...).

[...]


Euh, désolé, là j'ai pas compris ce que tu voulais dire...




je voulais dire que le problème du "C++" pour le programmeur, c'est de
croire que tout est objet, et qu'il n'y a plus de donnée réellement. (ca
fait partie du débat précédent NEW vs MALLOC).



Probablement. J'aurais dit que le problème de beaucoup de développeurs
C++ que j'ai croisé était de trop se concentrer sur les données membres
nécessaires à la mise en place d'un objet, plutôt que que sur là ou les
interfaces auxquels devaient répondre les objets.


Ce qui fait qu'en C++ les
programmeur n'ont jamais autant pisser de ligne, et définit autant de
fonctions (méthode). L'objet COM, philosophiquement, fait une différence
plus nette entre l'objet (une class, une structure), et son port de
communication (son interface = ces méthodes). En C++ l'objet c'est un
monolithe DATA+METHOD, COM définit un objet comme une boite noir qui fait
qqc,



Veux tu dire par là que COM est plus directif que C++, et que cette
directivité aide les gens à ne pas faire d'erreurs ?

et un ensemble d'interface que l'on peut demander par un QueryInterface
pour manoeuvrer cet objet d'une manière ou d'une autre... c'est pas la même
approche.



La réflexion en C++ n'existe pas, en effet. On peut juste en avoir une
version restreinte, qui permet de demander : Est-ce que l'objet de type
A répond à l'interface B, ou encore j'ai un objet a dont je sais
seulmement qu'il répond à l'interface B. Répond-t-il aussi à l'interface C ?

--
Loïc
Avatar
Arnaud Debaene
Loïc Joly wrote:


Compatibles, mais dans la douleur (même si à ce que j'ai compris les
ATL améliorent la situation).


Le problème, c'est surtout toutes les technologies "plus ou moins standard"
qui sont venues se greffer par dessus COM : Automation, les ActiveX, OLE2,
etc... Microsoft ne s'est jamais donné la peine de normaliser proprement et
sérieusement tous ces éléments, sans parler de VB et des langages de scripts
qui sont les plu répandus en terme d'utilisation mais qui ne supportent
qu'une partie restreinte de COM. Heureusement, j'ai l'impression qu'avc
.NET, Microsoft s'est rendu compte de l'importance d'une normalisation plus
formelle.

<snip> J'espère y comprendre pourquoi ils ont
redéveloppé un modèle objet, plutôt que de normaliser l'ABI d'un
modèle objet existant.


L'ABI de COM est celle de VC++ sauf erreur de ma part : v-table placée à
l'offset 0 de l'objet, avec des entrées de 4 octets.... A moins que tu
entendes autre chose par ABI? (c'est un concept dont le sens semble varier
selon les gens...).

Quand au modèle objet, je pense qu'il y a historiquement un clash entre les
concepteurs du COM "pur" (Don Box essentiellement si je ne me trompe pas) et
VB : ca se voit dans les différences (subtiles mais existantes) entre l'IDL
et les TLB : l'IDL a au départ été conçu pour générer du C (via l'ancètre de
midl) ou bien une "interface" dans un langage X qui devrait supporter COM :
c'est exactemeent la même approche que l'IDL de Corba avec des outils pour
mapper l'IDL en "interfaces" dans différents langages.
D'un autre côté, les concepteurs de VB (4 ou 5???) ont défini leur propre
modèle objet et le mécanisme d'introspection qui va avec avec une
représentation binaire des infos de type : la TLB. Ensuite, ils on tenu a
faire fusionner les 2 et c'est là que COM a probablement commencé à partir
en sucette. Certaines constructions de l'IDL ne sont pas traduisibles en TLB
(mais ont été conservées pour des raisons de compatibilité), et on a rajouté
de nouveaux éléments à l'IDL pour pouvoir renseigner complètement les TLB.
On en est ainsi arrivé à des inconsistences dans le modèle.
Exemple : un attribut en IDL est censé rajouter des informations à la
meta-description du type en question (son UUID par exemple). Il y a
cependantun attribut [oleautoamtion] qui limite les constructions du langage
utilisables dans le type attributé!! (une interface attributée avec
[oleautomation] *doit* dériver de IDispatch, ces méthodes *doivent*
retourner un HRESULT et prendre des paramètres compatibles automation,
etc...).

Ceci dit, COM n'est pas une panassé, mais il faut avoué que c'est du
C++ avant l'heure...



Euh, le C++ date de 83, COM de 95 (ou selon ce qu'on compte comme date
de début, 79 et 93). Donc le côté avant l'heure, j'y crois pas trop...



Oui, Vincent Burrel ferait mieux de revoir ses bouquins d'histoire de
l'informatique ;-)

<snip>
Ce que j'ai du mal à comprendre c'est pourquoi, malgré son arrivée
tardive, n'a-t-il pas plus essayé de s'intégrer dans l'un des nombreux
existants au moins. Je suppose que c'est parce que l'existant avait
des défauts et qu'il n'était pas envisageable de le faire évoluer.


Je n'en suis pas certain : je pense qu'au départ, l'approche était la même
que celle de Corba : on définit une interface de communication commune, à
charge aux différents langages qui veulent être compatibles de fournir une
couche d'interopérabilité. Ca n'a pas marché car la suprématie commerciale
de VB a fait que ce sont les idiomes spécifiques de VB (avec leur
limitations, surtout le "late-biding" et l'absence se typage fort - argh les
VARIANT!!! :-( ) qui en sont venus à être les standard de fait de COM, sans
jamais ête normalisés correctement pour autant.

Arnaud
Avatar
Vincent Burel
"Loïc Joly" wrote in message
news:41a85f37$0$17373$
Vincent Burel wrote:
> Y'a des différences, philosophique notamment. L'idée de multi interface


sur
> un objet par exemple,

Ce qui est la même philosophie que l'héritage multiple en C++, et même
les langages comme Java ont repris des bouts d'héritage multiple limités
pour permettre un objet multi-interface.



oui, mais y'a une notion d'héritage en plus, alors que le but n'est pas de
faire un objet qui hérite, mais qui communique, avec différente interface,
différent protocole, c'est de la data, et c'est la porte ouverte au
remoting... En ++ c'est pas une notion clair.

Si tu parles de OLE, ça date de 91. Et windows 3.11 date lui de 93. Dans
les deux cas, le concepts est postérieurs à C++ (CFront en était à la
version 3, les templates et exceptions existaient déjà, et le processus
de normalisation était en cours...).



pour moi, comme pour beaucoup de programmaeur , le ++ c'est arrivé bien
après 1990. Cela n'exlut pas que les gars qui ont inventé ca y travaillait
pas depuis les années 1930.

Veux tu dire par là que COM est plus directif que C++, et que cette
directivité aide les gens à ne pas faire d'erreurs ?



y'a une loi simple en informatique : "moins y'a de code, moins y'a de bug".
Et faire de COM peut te permettre de mettre en place une architecture object
et quelques concepts OO plus efficacement qu'en ++ à mon avis... maintenant
c'est aussi parce que derriere COM on peut programmer en "C", et y'a des
truc que le ++ ne permettra jamais, par exemple changer la v-table en
fonction des paramètre d'initialisation.... Maintenant, personellement,
j'utilise l'architecture COM quand ca répond à un besoin particulier, comme
tout programmeur vieillissants :-), j'ai des architecture OO en "C" qui sont
bien plus simple, et bien plus adapté à la tâche que je veux faire, plus
efficace et productive que ce que n'importe quelle langage spécialisé
pourrait m'apporter...

VB
1 2 3 4 5