J'ai essayé de faire l'expérience avec gcc, mais la version que j'ai est apparemment plus récente et fait le -lm automatiquement, donc impossible de savoir si une division flottante en dépend ou non.
J'ai essayé de faire l'expérience avec gcc, mais la version que j'ai est apparemment plus récente et fait le -lm automatiquement, donc impossible de savoir si une division flottante en dépend ou non.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
1. ZeroMemory n'est pas un bidouillage et Microsoft n'a jamais dit de ne plus l'utiliser, sinon donne-nous le lien de la page qui le dit. ZeroMemory et SecureZeroMemory sont les versions respectivement "optimisées" (en termes de vitesse d'exécution) et "sécurisées" (plus lente mais fait bien le boulot sans se poser de questions) d'une même "fonction". Alors ZeroMemory ou SecureZeroMemory ? Encore une fois, tous dépend des besoins.Envoyé par baccali
2. ZeroMemory était un exemple. J'aurais aussi pu prendre FillMemory comme exemple, et je ne serais pas non plus surpris de voir d'autres cas pareils ...
Je rappelle en outre que la question dans cette discussion est que si le fichier msvcrt.dll est indispensable sous Windows. Sur l'implication de la bibliothèque standard du C (dont une implémentation réside certes dans msvcrt.dll) dans Windows, c'est par ici. Du coup pour le ZeroMemory, c'est un mauvais argument ici, comme l'a fait remarquer Médinoc, car elle est en faveur de la bibliothèque standard (qui existe en plusieurs versions: msvcrt.dll, libc.lib, libcmt.lib, msvcr80.dll, etc.) et non de msvcrt.dll. Vu que de nombreuses DLLs (shell32.dll, ole32.dll, advapi32.dll, ...) et applications (csrss.exe, explorer.exe, services.exe, ...) importantes de Windows se lient et importent des fonctions de msvcrt.dll, ne devrait-on pas en conclure que ce fichier est indispensable à son fonctionnement ?
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Je retrouverai le lien et je le posterai à ce moment mais j'ai lu marqué (sur un blogs msdn) que ZeroMemory n'est là que pour aider des personnes qui utilisent d'autres langages. (çà doit avoir un rapport avec le COM et le .NET). C'est mieux expliqué dans le blog mais de toute façon c'est noté dans les remarques du lien plus haut.
PS : lien trouvé -> http://blogs.msdn.com/b/oldnewthing/...28/433341.aspx
PS2: RtlSecrureZeroMemory/SecureZeroMemory, par contre, est une fonction et non une macro!
Moi non plus mais ce que je veux dire c'est que tu traites avec un environnement de développement, donc pas forcément avec le système Windows. Ce sont deux choses bien différentes. Ce n'est pas parce que j'utilise SQLAllocHandle pour discuter avec une BDD que cette fonction ou quoi que ce soit en rapport avec l'ODBC est nécessaire pour discuter avec une BDD. Par contre le Drivers de la BDD, lui, est nécessaire.
Tu te trompes sur un point essentiel : crss.exe n'y est pas relié. Je t'explliques pourquoi ton erreur est importante car je crois que je ne me suis pas exprimé assez clairement. je l'ai déjà dit, dans la pratique, pour l'utilisateur final d'un produit desktop ou même serveur, ce fichier est essentiel au bon fonctionnement d'un PC WIndows et non de WINDOWS! Le fait que le sous système crss.exe n'en soit pas dépendant ou qu'il en existe 10 000 sous une édition pour éviter le dllhell est assez parlant. Mais pour le programmeur (et pourquoi pas l'utilisateur avancé) c'est différent! Petit exemple, sous Windows CE le C-Runtime est exporté par Coredll.lib et Corelibc.lib et ils ne respectent même pas les standards ANSI C. Est ce que tu fais moins tourner un Windows pour autant?
http://msdn.microsoft.com/en-us/library/ms859579.aspx
PS : Médinoc je vais de ce click faire quelques tests moi aussi et on en parle sur le bon topic. Sous GDB non plus rien de concret? Et melem merci pour la découpe au fait, désolé d'avoir douté de toi!
Tu continues à t'acharner sur ZeroMemory alors que j'ai bien dit que ce n'était qu'un exemple, mais je vais répondre à tes remarques quand même .
1. La page de msdn library que tu cites ne dit pas du tout qu'il ne faut plus utiliser ZeroMemory. Elle dit juste :
Ca correspond bien à ce que j'ai dit : besoin d'optimisation ? Utilise ZeroMemory. besoin de sécurité ? Utilise SecureZeroMemory.To avoid any undesired effects of optimizing compilers, use the SecureZeroMemory function.
2. La page oldnewthing que tu cites ne dit pas non plus que ZeroMemory a été proposée uniquement pour les développeurs dans d'autres langages. Elle explique juste pourquoi Microsoft préfère souvent utiliser ZeroMemory plutôt que = {0} dans leurs exemples de code pour initialiser tous les bits d'un tableau ou une structure à zéro et on y apprend que c'est parce que ZeroMemory est connue de tous alors que la syntaxe = {0} n'est connue que des programmeurs C et C++.
Si tu veux. C'est une philosophie différente. Mais pour moi en tous cas, le SDK (je dis bien le SDK, ça n'a rien à voir avec un EDI particulier) ce n'est pas n'importe quoi non plus.Moi non plus mais ce que je veux dire c'est que tu traites avec un environnement de développement, donc pas forcément avec le système Windows. Ce sont deux choses bien différentes.
OK désolé, csrss.exe n'y est pas lié, mais ça n'enlève pas le fait qu'explorer.exe, services.exe, lsass.exe, winlogon.exe et bien d'autres composants essentiels y sont, et importent des fonctions de la bibliothèque standard du C. J'ai vérifié avec Dependency Walker cette fois-ci pour ne plus dire des bêtises. Et tu vas pas faire comme si c'était une erreur monumentale de s'être trompé sur un exe quand même ! Et en passant, c'est csrss et non crss.Tu te trompes sur un point essentiel : crss.exe n'y est pas relié. Je t'explliques pourquoi ton erreur est importante car je crois que je ne me suis pas exprimé assez clairement.
Si on parle de msvcrt.dll, c'est bien qu'on parle de la version PC quand même .je l'ai déjà dit, dans la pratique, pour l'utilisateur final d'un produit desktop ou même serveur, ce fichier est essentiel au bon fonctionnement d'un PC WIndows et non de WINDOWS!
Ce sont plutôt les composants essentiels qui y sont liés qu'il faut regarder, et il y en a pléthore, pas ce qui n'y sont pas liés.Le fait que le sous système crss.exe n'en soit pas dépendant ou qu'il en existe 10 000 sous une édition pour éviter le dllhell est assez parlant. Mais pour le programmeur (et pourquoi pas l'utilisateur avancé) c'est différent!
C'est coredll.dll et corelibc.dll. Les .lib ne sont que des fichiers d'importation qui sont utilisés à l'édition statique des liens mais ils ne contiennent même pas les codes des fonctions, et tu peux utiliser coredll.dll sans te lier avec coredll.lib par exemple.Mais pour le programmeur (et pourquoi pas l'utilisateur avancé) c'est différent! Petit exemple, sous Windows CE le C-Runtime est exporté par Coredll.lib et Corelibc.lib et ils ne respectent même pas les standards ANSI. Est ce que tu fais moins tourner un Windows pour autant?
De rienEt melem merci pour la découpe au fait, désolé d'avoir douté de toi!
Et dans une appli toi tu t'en fous de la sécurité (je m'en doutais un peu mais bon! )
Donc on est d'accord c'est un bidouillage CQFD C'est même plus pour les programmeurs C.
Et la est bien le pb, tu confonds SDK (Software Developpement Kit, des outils d'aide à la programmation) et API (Application Programming Interface, ici le set de fonctions etc... qui te permettent d'utiliser le noyau et que le SDK peut utiliser, comme il peut tout aussi bien intégrer des librairie qu'ils jugent utiles)
PS: Chaque compilo a sa version de msvcrt.dll. Et il y'en a même qui remplacent les fonctions de la dll par des versions builtin. C'est pour cela qu'il est conseillé d'utiliser BeginThreadex au lieu de CreateThread (ou l'inverse je ne sais plus). D'où le fait, par exemple, qu'il y'a 100 000 versions de msvcrt sur les PC Windows. Tu veux les sources?
et
Donc tu n'as toujours pas compris. Sais-tu à quoi sert csrss.exe? C'est le common runtime subsystem. A quoi sert-il, à gérer windows. Quand tu lances un programme texte sous cmd.exe, qui gère l'affichage de la fenêtre de cmd.exe ou autre? Regardes dans ton tlist.exe pour voir un peu la hiérarchie des processus. C'est un peu le "init" de Linux mais avec d'autres fonctions essentielles. C'est en quelques sorte Windows. Lorsque tu te demandes pourquoi tel logiciel fait tel trucs sans que tu lui ait explicitement demandé de le faire, dit toi que c'est crss.exe qui s'en est chargé pour toi. Lorsque tu appuis sur Ctrl-Alt-Supp, qui gère les changements de session etc... csrss.exe est le premier processus lancé par le noyau et lorsque tu utilises les autres sous système ils font eux même appel à csrss donc lui c'est un truc essentiel à Windows. Par contre cherches explorer.exe ou cmd.exe dans un Windows Phone.
Grosse erreur! Essentielle oui, mais pour quoi? VMware ESX est basé sur pleins de Lib de chez eux. C'est pas pour autant que tout Linux dépend de ces libs
Tu rigoles? Et les fonctions sont où? Elles tombent du ciel? Pas compris là! Coredll et Corelibc ne seraient donc pas selon toi ce qui remplace msvcrt sur les Windows Phone?
PS : Je suis "Membre du Club"! Wepa \O/
Ha ha ha. J'en ai terminé avec cette discussion.
C'était un plaisir.
Ok ok mais je voulais quand même m'excuser encore si j'ai pu paraître impoli ou condescendant pendant la discussion. Ce n'était pas voulut. surtout que je trouve toujours de l'aide sur ce forum quand j'en ai besoin donc je voudrai vraiment pas passer pour tel mais j'ai rarement l'occasion de débattre avec un connaisseur donc je mettais plus dans le fond que sur la forme . En tout cas j'ai apprécier discuter avec toi malgré tout et j'ai même appris certaines choses comme je ne suis pas sous Windows depuis longtemps. Donc merci, bon WE et au plaisir Melem.
ZeroMemory n'est pas du tout un bidouillage.
C'est une "vieille" fonction de l'API win32 qui est maintenant remplacée par SecureZeroMemory
SecureZeroMemory n'existait pas sous VC6 ZeroMemory oui
effectivement , en tant que programmeur tu peux utiliser les fonctions standard du langage C via msvcrt.dll qui est le runtime de la lib C fournie par Visual Studio.
Mais il est fort probable que Microsoft utilise ses propres fonctions qui n'ont rien à voir avec le standard C pour assurer les fonctionnalités de son OS.
Pour faire une analogie, c'est comme un peu Office qui utilise son propre Framework en C++ et non pas MFC distribué pour tout le monde.
De toute façon pour Microsoft ils s'en fichent totalement d'être dans les standards ou pas
C'est pas possible de faire des fonctions standards sous Windows en C comme sous Linux ,l'architecture est totalement différente.
Donc les concepteurs de Windows sont obligés de faire leur propre cuisine.
Rien qu'une appli Windows lambda selon le standard de Microsoft n'est pas du tout dans le standard du langage C étant donné que tu déclares WinMain avec 4 paramètres et non un simple void main()....
au vu des messages que tu as postés je crois que tu apprends la programmation Windows et que tu viens de Unix ?
L'erreur énorme et monumentale c'est de penser la programmation Windows comme sous Unix !
Ne pas commettre cette erreur sinon tu vas tourner en rond.
La programmation Windows est bien spécifique cela n'a quasiment rien à voir avec la programmation sous Unix.
Il faut que tu jettes toutes tes connaissances sous Unix et repenser quelque chose de différent.
Sous Windows tu programmes selon un Software Development Kit win32
Sous Unix tu programmes en langage C directement , c'est une différence à prendre en compte.
Voilà pourquoi il n'y a absolument rien de standard en programmation Windows ( WinMain() au lieu de main()) sauf le support des fonctions du standard C.
Je te conseille de te procurer le livre de Charles Petzold si tu veux continuer dans cette voie-là
parce que c'est pas possible de l'implémenter techniquement dans le coeur de l'OS.
Enfin c'est mon explication.
De toute façon en programmation Windows très peu de choses en standard
oui c'est exact (on le voit avec Dependency Walker) ;mais comme l'écrit Baccali rien ne prouve que ces dll appellent les fonctions standard du c
Si tu étudies msvcrt.dll avec Dependency Walker( je n'ai que VC++6 ) il y a dans cette dll des API comme _findfirst ou _beginthread qui ne sont pas standards
http://www.utas.edu.au/infosys/info/...C/CStdLib.html
quelle est ta méthode pour qu'on le vérifie par nous-même ?
Toujours Dépendency Walker: Pour diverses DLLs référençant MSVCRT.DLL, j'ai regardé la liste d'imports.quelle est ta méthode pour qu'on le vérifie par nous-même ?
PS: Pour C99, la plupart des modifs ne nécessitent pas de changer l'OS. Certaines sont juste une question de fichiers d'en-tête!
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Mais puisque je dis que non. ZeroMemory et SecureZeroMemory coexistent, elles ont des utilisations différentes. SecureZeroMemory n'est pas là pour botter les f*sses à ZeroMemory.Envoyé par Mat.M
Si, c'est standard, ou devrais-je dire conforme. La norme n'exige pas que le point d'entrée d'un programme C s'appelle main ni quoi que ce soit sur ce point d'entrée d'ailleurs. Cela est réservé à l'implémentation (cf. Norme. "5.1.2 Execution environments"). Du coup, sous Windows, ça s'appelle WinMain. Par contre, main est exigée dans un type d'environnement appelé "hosted", qui est tenu de supporter tout programme strictement conforme.Envoyé par Mat.M
Bah, à part le coup de la fonction WinMain au lieu de main, qui est finalement conforme, je ne vois pas de quoi pourrait-il s'agir.Voilà pourquoi il n'y a absolument rien de standard en programmation Windows
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager