2010-01-30 3 views
6

J'ai récemment couru à travers une DLL installée sur mon système que Dependancy Walker (et tous les autres utilitaires que j'ai essayé) dit avoir zéro exportations par nom ou ordinal, mais le fichier est d'environ 4 Mo de taille. Je pensais que le but unique d'une DLL était d'exporter des fonctions pour une utilisation par un autre code alors quel serait le but d'une DLL sans exportations visibles?Comment une DLL peut-elle exporter zéro?

Répondre

4

Une façon de penser à une DLL est comme un conteneur pour les fonctions. L'exportation d'une fonction à partir d'une DLL rend ces fonctions visibles aux appelants en dehors de la DLL. Alors que l'exportation de fonctions à partir d'une DLL est peut-être le moyen le plus courant d'y accéder, de nombreuses plateformes offrent d'autres moyens d'accéder à des fonctions non exportées comme .NET Framework et Java (et je pense) LoadLibtary/GetProcAddress dans Win32

raisons pour ce faire sont variés, il est souvent parce qu'il est bénéfique pour le développeur d'avoir des fonctions dans une bibliothèque, mais indésirable pour les fonctions à appeler des applications externes

+0

Oh, c'est logique. Je n'ai jamais réalisé (ou même pensé) qu'il pourrait y avoir des manières d'employer une DLL autrement que par l'intermédiaire de la table d'exportation si vous l'avez écrite. –

3

Resource seule DLL, peut-être? Ceux-ci sont souvent utilisés à des fins de localisation, par exemple.

EDIT: il est également possible d'avoir une DLL avec du code qui fait quelque chose dans DllMain() pour rendre ses fonctionnalités disponibles. La DLL peut s'enregistrer avec un répartiteur global, par exemple, ou créer des objets noyau nommés ...

Questions connexes