2010-11-11 6 views
1

J'ai regardé DLLs dans les fenêtres, et j'ai vu plusieurs DLL qui ont les fonctions exportées 4 COM:La DLL exporte 4 fonction COM mais pas d'objet COM?! Je ne comprends tout simplement pas!

DllCanUnloadNow DllGetClassObject DllRegisterServer DllUnregisterServer

juste pour un exemple: c: \ windows \ system32 \ actxprxy.dll // < - WINDOWS 7 !!! (Je suppose que Vista aussi)

B - U - T quand je cherche des objets COM (en utilisant divers outils, y compris visual studio, nirsoft.net's DLLEXP.exe et d'autres outils) Je n'en trouve pas!

De plus, visual studio dit que ce n'est pas un objet COM, comment est-ce possible?! Je peux penser à une DLL COM sans interfaces/classes, mais je sais que certaines applications utilisent ces DLL.

Quelqu'un peut-il expliquer ce qui se passe ici? :-)

Merci!

+0

Est-ce simplement une curiosité oiseuse, ou quoi? Son nom suggère qu'il est utilisé pour une sorte de proxy, et certainement (sur ma machine XP) il semble être enregistré correctement dans le registre (comme d'autres DLL qui ont aussi prxy ou pxy dans leurs noms) –

Répondre

3

COM définit les vtables et les paramètres d'appel des méthodes d'interface COM. Toutefois, les pointeurs vers les implémentations de méthode ne sont jamais exportés à l'aide du mécanisme d'exportation de DLL: ces pointeurs vers des implémentations de méthode sont stockés sur la vtable de l'objet COM qui a été créé par la bibliothèque. Autrement dit, sans demander à la bibliothèque COM de créer un objet COM pour vous, il n'est pas possible de savoir comment la bibliothèque COM va "construire" un objet COM. Une partie de ce processus de «construction» consiste à placer les bons pointeurs de méthode dans la table virtuelle de l'objet.