Ich lief vor kurzem über eine DLL auf meinem System installiert, die Dependancy Walker (und jedes andere Dienstprogramm, das ich versuchte) sagt, hat keine Exporte nach Name oder Ordnungszahl, aber die Datei ist etwa 4 MB groß. Ich dachte, der einzige Zweck einer DLL wäre es, Funktionen zur Verwendung durch anderen Code zu exportieren, also was wäre der Zweck einer DLL ohne sichtbare Exporte?Wie kann eine DLL keine Exporte haben?
Antwort
Eine Möglichkeit, sich eine DLL vorzustellen, ist ein Container für Funktionen. Durch das Exportieren einer Funktion aus einer DLL werden diese Funktionen für Aufrufer außerhalb der DLL sichtbar. Während der Export von Funktionen aus einer DLL vielleicht die gebräuchlichste Methode ist, um Zugriff darauf zu ermöglichen, bieten viele Plattformen andere Möglichkeiten, auf Funktionen zuzugreifen, die nicht exportiert wurden, wie Reflektion in .NET Framework und Java und (glaube ich) LoadLibtary/GetProcAddress in Win32
Gründe dafür sind vielfältig, oft ist es, weil es in den Entwickler von Vorteil ist, Funktionen in einer Bibliothek haben, aber nicht wünschenswert für diese Funktionen aus externen Anwendungen
Ressourcen-DLL, vielleicht genannt werden? Diese werden beispielsweise häufig für Lokalisierungszwecke verwendet.
BEARBEITEN: es ist auch möglich, eine DLL mit Code zu haben, der etwas in DllMain() tut, um irgendwie seine Funktionalität zur Verfügung zu stellen. Die DLL kann sich beispielsweise bei einem globalen Dispatcher registrieren oder benannte Kernel-Objekte erstellen ...
Oh, das macht Sinn. Ich habe nie realisiert (oder auch nur darüber nachgedacht), es könnte Möglichkeiten geben, eine DLL anders als über die Export-Tabelle zu verwenden, wenn Sie sie geschrieben haben. –