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 :

DLL enregistrées dans la registery


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 DLL enregistrées dans la registery


    Une classe est enregistrée dans la registery.

    Comment savoir de quelle DLL vient cette classe ?


  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu parles de classe COM? C'est bien simple:
    La clé HKCR\CLSID\{CLSID de la classe}\InprocServer32 contient le chemin de la DLL.
    S'il n'y a pas de clé InprocServer32, c'est qu'il s'agit d'un composant out-of-process au lieu d'un composant inproc.

    Aussi, si la DLL est MSCOREE.DLL, c'est qu'il s'agit en réalité d'une classe .Net, et le nom de la DLL qui la contient est dans les sous-clés de InprocServer32.

  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
    Alors oui c'est bien une classe COM et la DLL n'est pas MSCOREE.DLL.

    La classe dont je cherche la DLL s'appelle "pdfDistiller".

    Par contre, je n'ai pas trouvé de clé InprocServer32... et donc aucun demain de DLL...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Il y a donc sans doute un LocalServer32 à la place, et peut-être un InprocHandler32 s'il s'agit d'une classe OLE.

  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
    Bon j'ai reparcouru toute la registery mais je n'ai pas trouvé de
    LocalServer32 ou InprocHandler32 en recherchant le nom de ma classe.

    Par contre j'ai réussi à trouver la DLL (en peu par chance) grâce à visual studio (MVS) et l'ajout de préférences. Par contre quelques détails me taquinent.

    1) Je n'ai donc toujours pas de moyen de trouver la DLL dont appartient la classe dans ma registery sans MVS

    2) Dans MVS lors de l'ajout de préférence il faut bien spécifier une DLL ?

    3) Pourquoi lorsque je veux ajouter la DLL d'acrobat distiller le chemin de acrodist.exe est spécifié et pas le chemin de la DLL ? (La DLL serait dans le .exe ?)

    4) Une fois la DLL ajoutée aux préférences, il est possible de parcourir les méthodes et propriétés des classes grâce à l'explorateur d'objet. Maintenant supposons que je n'ai pas visual studio comment faire pour visualiser les méthodes et propriétés des classes de ma DLL ? Y a-t-il un moyen de faire cela avec les outils de base de window XP ?

    PS: Pour info la DLL de la classe "PdfDistiller" est "Interop.ACRODISTXLib.dll"

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Par nom de la classe, tu veux dire son ProgID?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Interop.quelque chose, c'est une classe générée par Visual.
    Typiquement, générée pour qu'une assembly .Net puisse appeler des classes COM.

    Ce que tu as rajouté au projet, ce n'est pas la classe elle-même, mais sa Type Library (bibliothèque de types), référencée dans HKCR\TypeLib.

  8. #8
    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
    Interop.quelque chose, c'est une classe générée par Visual.
    Typiquement, générée pour qu'une assembly .Net puisse appeler des classes COM.
    C'est vraiment juste une classe ?

    Citation Envoyé par Médinoc Voir le message
    Ce que tu as rajouté au projet, ce n'est pas la classe elle-même, mais sa Type Library (bibliothèque de types), référencée dans HKCR\TypeLib.
    Merci pour les infos par contre ça ne répond pas vraiment à mes questions 1, 4

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    N'oublie pas qu'il y a différentes choses qui référencent une classe COM:
    • ProgId (avec ou sans version)
    • CLSID
    • AppId (optionnel, surtout utilisé pour DCOM)
    • LIBID (pour les bibliothèques de types, clé TypeLib du registre)

    Le registre peut aussi contenir les IID de certaines interfaces, pour indiquer le proxy/stub à utiliser lors du marshalling, et/ou le LibId d'une bibliothèque de types qui la décrit...

    Quand on ajoute une référence COM à un projet Visual Studio, c'est via la bibliothèque de type, pas via le ProgId.

  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 essayé avec une autre classe plus commune "word.application",
    j'ai bien trouvé le InprocServer32 avec le nom de la DLL
    par contre ca ne marche pas avec "PdfDistiller.PdfDistiller"


    Partons d'un exemple simple si non il y a trop de voies ^^

    J'ai le ProgId d'une classe étant enregistrée dans la registery.

    1) Est-il possible de retrouver la DLL d'où vient cette classe si il n'y a pas de InprocServer32, LocalServer32 ou InprocHandler32 ?

    2) [IMPORANT] Est-il possible d'accéder aux méthodes et propriétés de cette classe ?
    (si possible avec des outils windows)

    C'est tout ce que je voudrais savoir ^^

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    1. S'il n'y a aucun des trois, alors ça ne marchera pas à l'exécution: CoCreateInstance() foirera avec REGDB_E_CLASSNOTREG.
    2. Tu veux dire voir leur déclaration? Vu qu'il y a une bibliothèque de types, sans doute que oui. Pas avec des outils "Windows", mais avec un outil "Visual": Le OLE/COM Object Viewer (OLEVIEW.EXE) possède une option pour voir le contenu d'une bibliothèque de types.

    Plus d'infos: http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

  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
    Ok merci beaucoup Médinoc !

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    PS: Pourrais-tu poster le contenu complet de la clé de registre en question? (celle dans CLSID)

  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
    {1CD675B2-ECD1-11D1-B976-00600802DB86}

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    PS: Pourrais-tu poster le contenu complet de la clé de registre en question? (celle dans CLSID)

  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
    {1CD675B2-ECD1-11D1-B976-00600802DB86}
    -LocalServer32 > C:\PROGRA~1\Adobe\ACROBA~1.0\Distillr\acrodist.exe
    -ProgID > PdfDistiller.PdfDistiller.1
    -Programmable > vide
    -VersionIndependentProgID > PdfDistiller.PdfDistiller

    Voila

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    C'est donc bien un composant out-of-process: Il n'est pas implémenté par une DLL COM, mais par un Exe qui appelle CoRegisterClassObject() ou RegisterActiveObject() une fois lancé.

  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
    et donc dans ce cas impossible de savoir de quelle DLL il vient ?

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Ben non, puisqu'il ne vient PAS d'une DLL.

  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
    C'est donc bien un composant out-of-process: Il n'est pas implémenté par une DLL COM, mais par un Exe qui appelle CoRegisterClassObject() ou RegisterActiveObject() une fois lancé.
    Donc il y a si j'ai bien compris :

    Des entrées dans la registery (afin d'appeler des classe ou fonction) qui pointe ou sur:
    Un .exe comme ca dernier cas
    Une interface pour les DLL COM

    Par contre il y a encore quelque chose d'étrange... pour "word.application"
    il y a un InprocHandler32 > ole32.dll
    InprocServer32
    Assembly >Microsoft.Office.Interop.Word, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C
    Class > Microsoft.Office.Interop.Word.ApplicationClass
    RuntimeVersion > v1.1.4322

    Donc voila cette classe word.application n'est pas dans ole32...
    Il n'y a pas d'exe n'y d'interface pointant sur une DLL donc ou se trouve cette classe ? -_-;

Discussions similaires

  1. Réponses: 16
    Dernier message: 22/03/2005, 21h57
  2. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 00h59
  3. Insertion enregistrement dans table
    Par naidinp dans le forum ASP
    Réponses: 13
    Dernier message: 11/09/2003, 09h56
  4. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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