IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Explorer dll32.dll / user32.dll méthodes question


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut Explorer dll32.dll / user32.dll Fonctions question
    Bonjour,

    Comment faire pour visualiser les méthodes et propriétés de dll32.dll ou user32.dll ?

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    salut bacelar,

    Est-il possible de faire cette visualisation avec OleViewer.exe également ?

    Si oui le quel est le meilleur entre OleViewer et Dependency Walker ?

    Merci

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ça dépend pour quoi.

    OLE Viewer, c'est bien pour les composants COM. Mais pour les DLLs normales, on utilise Dependency Walker. En fait, je dirais que OLE Viewer c'est pour les cas particuliers, donc tu dois commencer par DW.
    ... Et si DW te dit que la DLL en question est une DLL COM (elle exporte DllGetClassObject() et compagnie), alors tu peux utiliser OLE Viewer.
    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.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    ok Merci à vous !

    Dernière question maintenant que je peux visualiser les fonctions des DLL comment faire pour savoir ce que fait exacement la fonction et surtout... quels paramètres attend cette fonction ?

    Y a-t-il quelque chose de mieux que de chaque fois chercher sur
    http://msdn.microsoft.com
    par exemple ?

    Merci

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Une dll nue (sans .lib, .h, .chm ou documentation) est inutilisable sans faire un lourd travail de reverse-engeneering.
    Pour les dll COM, le format permet d'obtenir une documentation succinctes des classes et méthodes des composants exporté par la dll.

    Quel est le but de vos pérégrination, à par vous compliqué la vie à ne pas utiliser une documentation qui vous est généreusement offerte ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Une dll nue (sans .lib, .h, .chm ou documentation) est inutilisable sans faire un lourd travail de reverse-engeneering.
    Pour les dll COM, le format permet d'obtenir une documentation succinctes des classes et méthodes des composants exporté par la dll.

    Quel est le but de vos pérégrination, à par vous compliqué la vie à ne pas utiliser une documentation qui vous est généreusement offerte ?
    Bas je voulais juste savoir si il y a un moyen d'avoir une documentation un peu plus que "succinctes" pour les dll COM par exemple

    PS: est-ce que user32.dll à un .lib, .h, .chm ?

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    La doc, c'est celle de l'auteur. Dans le cas de Microsoft, c'est MSDN. Pour COM, soit il s'agit d'interfaces Microsoft, soit la doc est chez le créateur de la DLL ou du programme qui l'utilise.

    Au passage, user32 possède un .lib, mais il est dans le Platform SDK (et il a été plus ou moins rippé pour créer le libuser32.a de MinGW).
    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.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par sokai Voir le message
    ok Merci à vous !

    Dernière question maintenant que je peux visualiser les fonctions des DLL comment faire pour savoir ce que fait exacement la fonction et surtout... quels paramètres attend cette fonction ?

    Y a-t-il quelque chose de mieux que de chaque fois chercher sur
    http://msdn.microsoft.com
    par exemple ?

    Merci
    Je parlais des DLL dans C:\WINDOWS\SYSTEM32 donc MS donc MSDN.

    Au moin ce que je pensais était juste et j'ai une vision plus claire à présent.

    Merci bcp pour vos réponses !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    J'ai encore une question Est-il possible d'enregistrer une DLL normale (user32.dll) dans la registery comme une DLL COM (scrrun.dll) ?

    1)Bon je sais que non... mais pourrais-je avoir une explication détaillée pour bien comprendre ?

    2)Je demande cela parce que les dll COM ont l'aire facilement accessible par rapport aux dll "normales", quelle est la raison d'avoir des COM et les autres... ?)

    Merci !

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Une dll COM est une dll normal particulière comme un carré est un rectangle particulier.

    Lors de l'enregistrement de la DLL COM, le système se sert de ces particularités pour ajouter à la registry les informations nécessaires à l'utilisation des composants COM dans d'autres programmes.

    Ces particularités se résument, dans le cas de l'enregistrement, à une simple fonction exportée avec un non déterminé.
    Mais cette fonction est en charge de remplir la registry avec des informations sur les composants COM embarqués dans la dll. Donc pas de composant COM, l'enregistrement ne servira à rien, même en cas de réussite.

    La raisin d'être des composants COM est bien d'être "facilement" utilisable par un ensemble de logiciel conçus pour s'en servir, comme les logiciels d'Office, IE. Pour faire ce "miracle", les concepteurs de composants COM doivent suivre un ensemble de règles.

    Il n'y a pas de miracle, si la dll ne contient pas de composants COM qui ont été conçus en suivant ses règles, il est impossible pour les programmes hôtes de se servir de cette dll.

    Il est toujours possible d'utiliser un dll ayant un API en C si les programmes hôtes sont conçus pour pourvoir s'en servir. C'est une approche moins souple mais plus portable que des composants COM.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    Merci bcp bacelar !

    Maintenant je sais quand utiliser dependency walker et oleviw ^^ afin de visualiser les fonctions des DLL (qui était ma question de départ).
    Je connais également les différence entre DLL COM et DLL "normale".

    Maintenant j'ai 2 question sur ces programmes qui permettent de parcourir les DLLs.

    Ole: Dans l'arborescence de base il y a "Objet COM" et "Type Library" par exemple. Qu'est ce que le second représente par rapport à un objet COM ?
    (Ca à l'aire d'avoir les fonctions d'API connu tel que word etc... mais une explication claire m'aiderais à y voir claire)


    DW: Lorsque je visualise user32.dll par exemple il y a une arborescence des 8 autres dll en dessous comme kernel32.dll ntdll.dll etc... est-ce que cela veut dire que ces 8 dernières dll sont dans user32 ? (D'après le fonctionnement d'un "tree" c'est ce qui devrait être juste... mais ca me semble faux et illogique).

    Merci encore de me lire et de me répondre !

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1. La "type library" est un fichier décrivant les interfaces COM spécifiques exportées par les objets en question. Cela peut permettre, entre autres, de régénérer le fichier .h qui déclare lesdites interfaces, pour les utiliser en C++. Ellle permet aussi la génération automatique de proxy et stub quand on utilise l'objet COM en inter-processus (ou inter-thread, dans certains cas).
      En fait, c'est une forme limitée d'introspection. À noter que la "type library" peut être aussi bien dans un fichier .tlb séparé que dans la DLL elle-même en tant que ressource.
    2. Non, ça veut dire que user32.dll référence les DLLs en question (qu'elle utilise des fonctions de ces DLLs et a donc "besoin" de ces DLLs pour marcher). À noter que les dépendances croisées sont possibles; c'est une des raisons pour lesquelles ont ne doit pas appeler de fonction d'une autre DLL (hormis kernel32) dans DllMain() (on n'est pas censé appeler non plus des fonctions de la CRT, mais généralement il se trouve que ça marche, même si ce n'est pas garanti).
    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.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    hmm ok mais si les dll COM sont composées d'Objet n'est ce pas ? Pk ajouter des interfaces ?

    Quelle est la différence entre une Interface, un Objet COM, un Objet OLE et une classe ?

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un object COM n'est jamais référencé directement en tant que tel, c'est ce qui fait la force du système.

    Chaque classe COM implémente un certain nombre d'interfaces COM, et c'est uniquement par ces interfaces qu'on les appelle.

    Pour moi, un object OLE est un objet d'une classe COM implémentant certaines interfaces spécifiques. Les contrôles ActiveX sont aussi des classes COM particulières.
    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.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    ok

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    1. C'est du VB ? Alors dans ce cas, ça ressemble à du late-binding: Utilisation de l'interface IDispatch.
    2. Tu parles des termes en IDL, là?
      • coclass: Contient généralement juste le ProgID, CLSID et (pas toujours) la liste des interfaces que la classe en question implémente.
      • interface: Une vraie interface au sens C/C++ du terme, utilisable en early-binding.
      • dispinterface: Une interface "virtuelle" n'existant que pour le late-binding avec IDispatch. Indispensable pour les langages non-compilés.
      • Interface duale: Les deux ensemble: Une interface C/C++ qui hérite de IDispatch au lieu de hériter directement de IUnknown.
    3. Si une classe COM n'a pas de coclass déclarée, la classe COM n'est pas instanciable via CoCreateInstance() : Généralement ça veut dire que d'autres fonctions l'instancie, comme une méthode d'une autre classe, ou une fonction isolée comme CreateStreamOnHGlobal(). Mais pourquoi me parles-tu de user32.dll? Cette DLL-ci ne contient aucune classe COM...
      Ou bien, tu veux le cas général? Ben oui, dans ce cas on passe par un wrapper écrit dans un langage permettant d'accéder aux fonctions de ladite DLL.
    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.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    La registery sert donc de "passerelle" entre les programme et les DLL ?

    et lorsque l'on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    On "questionne" la registery voir si il y aune entrée (key) contenant Scripting.FileSystemObject ayant les informations sur la DLL qui elle contient la classe/objet demandé, et cet classe/objet et composé de une ou plusieures interfaces contenant les méthodes/fonctions à utiliser lorsque notre objet est instancié. C'est bien ca ?


    Après il peut y avoir des trucs louches comme WORD qui je crois peut avoir une DLL .net ET/OU une "Type Library"COM (par exemple) qui elles 2 peuvent contenir la même classe/objet. Si ce n'est pas le même une classe/objet qui à le même nom des deux côtés... est-ce que je me trompe ?

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par sokai Voir le message
    La registery sert donc de "passerelle" entre les programme et les DLL ?
    Je dirais plus "annuaire" que "passerelle" ici.

    et lorsque l'on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    On "questionne" la registery voir si il y aune entrée (key) contenant Scripting.FileSystemObject ayant les informations sur la DLL qui elle contient la classe/objet demandé, et cet classe/objet et composé de une ou plusieures interfaces contenant les méthodes/fonctions à utiliser lorsque notre objet est instancié. C'est bien ca ?
    Oui. Mais attention, ça se fait en deux étapes:
    On récupère d'abord un objet COM qui implémente l'interface IClassFactory (l'objet retourné par DllGetClassObject()), puis on appelle sa méthode CreateInstance() pour créer l'objet voulu. Et ça, c'est seulement le cas basique (DLL InprocServer32); c'est plus compliqué pour les composants out-of-process.

    Après il peut y avoir des trucs louches comme WORD qui je crois peut avoir une DLL .net ET/OU une "Type Library"COM (par exemple) qui elles 2 peuvent contenir la même classe/objet. Si ce n'est pas le même une classe/objet qui à le même nom des deux côtés... est-ce que je me trompe ?
    Attention, la Type Library ne contient pas vraiment de classe: Elle ne fait que décrire ses interfaces.
    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.

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 252
    Points : 124
    Points
    124
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Je dirais plus "annuaire" que "passerelle" ici.


    Oui. Mais attention, ça se fait en deux étapes:
    On récupère d'abord un objet COM qui implémente l'interface IClassFactory (l'objet retourné par DllGetClassObject()), puis on appelle sa méthode CreateInstance() pour créer l'objet voulu. Et ça, c'est seulement le cas basique (DLL InprocServer32); c'est plus compliqué pour les composants out-of-process.


    Attention, la Type Library ne contient pas vraiment de classe: Elle ne fait que décrire ses interfaces.
    1) J'avais oublié il y a encore une entrée (key) pointant sur un .exe (WINWORD.EXE) c'est cela les composants out-of-process ?

    2) Pour la Type Library je parle de "classe" car j'ai remarqué qu'elle ont toutes des "coclasse" qui elle on l'aire d'être ce qui est appelé par la registry et qui ont également l'aire de contenir toutes les interfaces énoncées dans la Type Library. faux ?

    3) Sans ces coclasse il n'est pas possible d'instancier une interface non?

    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Message d'erreur The system DLL user32.dll
    Par cdevl32 dans le forum Windows XP
    Réponses: 1
    Dernier message: 20/11/2009, 00h26
  2. Réponses: 0
    Dernier message: 06/03/2009, 15h12
  3. [XP] Problème avec user32.dll
    Par fally dans le forum Windows XP
    Réponses: 8
    Dernier message: 11/06/2008, 15h01
  4. [USER32.DLL] SetParent et PopUp
    Par TSalm dans le forum Windows
    Réponses: 4
    Dernier message: 13/11/2007, 16h06
  5. VBA/xl97 - Comment arrêter un timer ds user32.dll
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2005, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo