Utilisez-vous les API Windows
De quelle façon et pour quelle raison ?

Le , par jdsetls, Membre habitué
Utilisez-vous les API Windows ?
Bonjour,

Qui utilise les API Windows et de quelle façon ?
J'ai l'impression qu'on peut absolument tout faire avec, sauf qu'elles sont un peu décourageantes en terme de convivialité.

Qu'en pensez-vous ?

Merci
Cordialement


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Patrice Terrier Patrice Terrier - Membre averti https://www.developpez.com
le 18/05/2014 à 12:53
Principalement les programmeurs système, les programmeurs de jeux, et les fournisseurs de composants qui proposent des "addons" sous forme de DLL Win32, seul format compatible avec tous les langage de programmation Windows, à condition d'utiliser la convention d'appel _stdcall au lieu de _cdecl.

Bien entendu pas question de MFC ni d'ATL et encore moins de DotNET

Quelques avantage qui résultent de l'utilisation directe de l'API Windows bas niveau :
- Il n'y a aucune encapsulation, donc pas de Framework supplémentaire à télécharger.
- Le code est très rapide et très compacte car tout est déjà dans la Flat API de Windows.
- On peut contourner les bugs des langages "évolués".
- On peut créer ses propres composants.
etc.

Pour ceux qui parlent anglais, voir ma profession de foi ici :
http://www.jose.it-berater.org/smffo...p?topic=1129.0

et pour ceux qui veulent en apprendre plus sur la programmation bas niveau (en anglais), voir là :
http://www.jose.it-berater.org/smffo...hp?board=151.0

...
Avatar de jurassic pork jurassic pork - Membre expert https://www.developpez.com
le 18/05/2014 à 13:14
hello Patrice,
Bien entendu pas question de MFC ni d'ATL et encore moins de DotNET
Qu'entends-tu par là ?
Avatar de jdsetls jdsetls - Membre habitué https://www.developpez.com
le 18/05/2014 à 13:30
Bonjour,
Si j'ai bien compris, la cinquième édition du livre de Charles Petzold SDK est 'culte'.
Je me souviens avoir acheté un des tout premiers bouquin en américain sur les API.
Un pavé dans les 1300 pages.
Cordialement
Avatar de Patrice Terrier Patrice Terrier - Membre averti https://www.developpez.com
le 18/05/2014 à 16:58
Qu'entends-tu par là ?
Depuis de nombreuses années, toute la politique de Microsoft a été de détourner les "programmeurs" de la programmation bas niveau.
Sous prétexte que le code "managé" est plus sûr que le code bas niveau qui lui est "unsafe", résultat les jeunes informaticiens ne savent plus programmer en utilisant directement le SDK, et il sont incapable d'écrire le moindre bout de code avec un simple éditeur ASCII et un compilateur en ligne de commande, et je ne parle même pas de la taille du code généré.

Je programme de temps en temps en C#, mais ne l'utilise jamais en production, uniquement pour des démos. Car je ne supporte pas d'attendre 45 secondes avant de pouvoir afficher "Hello world" la première fois qu'il doit charger le Framework DotNET.
En outre comme le code IL n'est pas du véritable code compilé, il est impossible de l'exécuter sans "run-time", dans ces conditions je préfère utiliser WinDev.

Concernant MFC et ATL, ils ne fonctionnent pas sans le CRT Microsoft, alors bonjour la galère quand la bonne version n'est pas installée sur la machine des clients, ou alors il faut utiliser à chaque fois un installateur, donc pas question d'envoyer simplement un ZIP avec juste l'EXE. Et comme je n'utilise pas la POO je n'ai rien à faire de MFC (Microsoft Foundation Class).

...
Avatar de DelphiManiac DelphiManiac - Membre émérite https://www.developpez.com
le 18/05/2014 à 18:01
Citation Envoyé par Patrice Terrier Voir le message
...
En outre comme le code IL n'est pas du véritable code compilé, il est impossible de l'exécuter sans "run-time", dans ces conditions je préfère utiliser WinDev....
Le code Winev n'est pas plus compilé que l'IL et Windev à tout autant besoin d'un runtime.

L'avantage de l'IL par rapport à Windev, c'est que le framework (au moins en version 2) est déployé nativement sur la plupart des versions de Windows.

Concernant les API, pourquoi pas quand on a besoin de performances maximales, sinon le reste du temps, c'est une "bétise" de se passer des framework, ceux ci apportent des fonctionnalités testées et validées. Pourquoi réinventer la roue à chaque fois ?

En allant à l’extrême, tu devrais te mettre à l'assembleur, cela semble bien correspondre à ta forme de pensée, mais ce n'est pas parce que tu penses d'une certaine manière que celle ci est la meilleure :/ La réciproque es tout autant valide.

Juste pour mon information, quand tu codes et que tu as besoin d'afficher une fenêtre, tu codes toi même, à chaque fois, la boucle de gestion des messages ?
Avatar de Patrice Terrier Patrice Terrier - Membre averti https://www.developpez.com
le 18/05/2014 à 19:26
Le code Winev n'est pas plus compilé que l'IL et Windev à tout autant besoin d'un runtime.
Oui, vous avez tout à fait raison, WinDev est du p-code, mais je préfère utiliser WinDev que DotNET, car je n'ai pas à me prendre la tête pour m'interfacer avec les DLLs bas niveau.

Concernant les API, pourquoi pas quand on a besoin de performances maximales, sinon le reste du temps, c'est une "bétise" de se passer des framework, ceux ci apportent des fonctionnalités testées et validées. Pourquoi réinventer la roue à chaque fois ?
Je ne cherche pas à polémiquer, j'essaie de répondre aux questions qui me sont posées.
Je ne cherche pas non plus à réinventer la roue, puisque déjà tout existe dans l'API bas niveau

En allant à l’extrême, tu devrais te mettre à l'assembleur, cela semble bien correspondre à ta forme de pensée, mais ce n'est pas parce que tu penses d'une certaine manière que celle ci est la meilleure.
Pour ce qui est le cœur de mon métier, à savoir la programmation de composants, je n'ai pas le choix.
Par contre quand je dois écrire des applications complètes, je fais appel à WinDev, c'est pour cela qu'il fait partie de ma boîte à outils.

Concernant l'assembleur, pourquoi pas, lorsque c'est nécessaire...
Voici un exemple de calcul matriciel utilisé dans la version 32-bit de GDImage.dll (écrit en PowerBASIC)
Code : Sélectionner tout
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
SUB MatrixMul5x5FPU(BYREF mr() AS SINGLE, BYREF m1() AS SINGLE, BYREF m2() AS SINGLE )
DIM p AS SINGLE PTR

p = VARPTR(m1(0))
! mov ecx,eax
p = VARPTR(m2(0))
! mov edx,eax
p = VARPTR(mr(0))

block:
! call column
! call column
! call column
! call column
! call column
EXIT SUB

column:
! call cell
! call cell
! call cell
! call cell
! call cell
! add edx,20
! sub ecx,20
! ret

cell: ' row A * column B
! fld   dword ptr [ecx   ]
! fmul  dword ptr [edx   ]
! fld   dword ptr [ecx+20]
! fmul  dword ptr [edx+04]
! fld   dword ptr [ecx+40]
! fmul  dword ptr [edx+08]
! fld   dword ptr [ecx+60]
! fmul  dword ptr [edx+12]
! fld   dword ptr [ecx+80]
! fmul  dword ptr [edx+16]
! faddp st(1),st(0)
! faddp st(1),st(0)
! faddp st(1),st(0)
! faddp st(1),st(0)
! fstp  dword ptr [eax]
! add   eax,4
! add   ecx,4
! ret
END SUB
Juste pour mon information, quand tu codes et que tu as besoin d'afficher une fenêtre, tu codes toi même, à chaque fois, la boucle de gestion des messages ?
Tout dépend du langage que j'utilise, mais les exemples que j'ai posté ici, sont issus du C++, alors j'utilise la seule syntaxe qui me permet de faire du copier coller de l'un à l'autre. Au passage çà permet de voir ce qu'il y a sous le capot, car n'oubliez pas que WinDev lui-même est programmé principalement en C++.

...
Avatar de jurassic pork jurassic pork - Membre expert https://www.developpez.com
le 19/05/2014 à 13:05
hello,
je suis tout à fait d'accord avec DephiManiac concernant dotnet. Il est vrai que depuis windows 7 le framework dotnet est intégré à toutes les versions de windows. Sachant que c'est microsoft qui le produit autant dire que son intégration à windows est optimale. Patrice tu dis que tu attends 45 secondes pour que dotnet se lance la première fois, cela m'étonne fortement tu dois avoir un processeur un peu lent . L'avantage a l'utiliser dans windev par rapport aux api c'est que les objets dotnets sont vus comme des classes avec leurs methodes et leurs propriétés. Beaucoup plus facile à interfacer qu'avec les apis. Bien sur tout n'est pas parfait et il y a des assemblages dotnet que l'on arrive pas à utiliser dans windev mais la plupart du temps cela fonctionne.

Ami calmant, J.P
Avatar de Patrice Terrier Patrice Terrier - Membre averti https://www.developpez.com
le 19/05/2014 à 14:09
Monsieur JP

L'avantage a l'utiliser dans windev par rapport aux api c'est que les objets dotnets sont vus comme des classes avec leurs methodes et leurs propriétés. Beaucoup plus facile à interfacer qu'avec les apis.
Je comprends votre point de vu, mais en raison des contraintes de programmation qui sont les miennes, je préfère l'utilisation de l'API bas niveau qui me permet de passer d'un langage à l'autre... facilement (oui, oui).

...
Avatar de Hibernatus34 Hibernatus34 - Membre expérimenté https://www.developpez.com
le 19/05/2014 à 14:54
Même chez Microsoft, il est arrivé qu'on utilise le SDK pour contourner la lenteur de .Net.
Il y avait un article de blog de l'équipe Visual Studio qui expliquait comment ils faisaient apparaître le splash screen de VS2010 et pourquoi (lenteur de chargement avec .Net).

Microsoft se ré-intéresse au C++ depuis quelques temps, et au lieu de faire une API "tout .Net" comme certains le prédisaient, il ont fait WinRT...

Personnellement, je pense que vous avez tous raison, seulement vous ne développez pas les mêmes choses. WinDev n'est pas dépendant de .Net, donc une "extension" à WinDev ne doit pas l'être non plus.

Comprendre le fonctionnement interne d'une appli Windows me paraît utile, car WinDev se calque pas mal dessus.
Un exemple simple : TimerSys() ne fait qu'un SetTimer(), qui génère un message WM_TIMER, donc un événement de l'IHM, et non un traitement parallèle comme peuvent le penser des débutants.

J'ai moi aussi développé des extensions à mes applis WinDev sous forme de DLL natives et elles n'utilisent évidemment aucun framework à la noix (genre MFC), il faut que ça soit léger, rapide, fiable et sans dépendances. De toute façon, ce que je fais avec est plus facilement écrit en C++ qu'en un quelconque langage .Net.
Avatar de Patrice Terrier Patrice Terrier - Membre averti https://www.developpez.com
le 19/05/2014 à 18:02
Monsieur Hibernatus34

Vous avez tout à fait raison.
Microsoft est entrain (une nouvelle fois) de faire machine arrière, pour générer à nouveau du code qui ne nécessite pas un Framework monstrueux (DotNET) et qui soit capable de tourner sur des tablettes... ANDROID (sic), la concurrence a du bon, merci Google !

Retour à la case départ.

PS : GDIPLUS et même DWM sont écrits en mode procédural et en code dit "unsafe" !!!

Note : code "unsafe" = code qui manipule des pointeurs pour adresser directement les registres du CPU.
C'est la seule chose que comprenne le code machine (assembleur), avec entre autre l'instruction JUMP qui n'est rien d'autre qu'un GOTO

...
Contacter le responsable de la rubrique WinDev