// Time-stamp: "(09.05.01 05:51) linkaufrufer.cpp [Klaus Wachtler]" // // kleine Demo zum Laden und Verwenden einer DLL. // // Kompilieren und Linken: // cl -GX linkaufrufer.cpp demodll.lib // Zum Linken ist die Datei demodll.lib nötig. // Zum Starten muß die demodll.dll im gleichen Verzeichnis sein // (oder sonstwie erreichbar -> PATH-Variable). #include <stdio.h> #include <windows.h> #include <winbase.h> // Deklarationen der Funktionen in der DLL: extern "C" int summe( int, int ); extern "C" int immereinsmehr( void ); int main() { // Aufruf der Funktionen: for( int i=0; i<10; i++ ) { try { printf( "Summe von %d und %d ist %d; immer eins mehr ist %d\n", i, i/2, summe( i, i/2 ), immereinsmehr() ); } catch( int Fehler ) { fprintf( stderr, "int-Ausnahme %d gefangen!\n", Fehler ); } catch( ... ) { fprintf( stderr, "irgendeine Ausnahme gefangen!\n" ); } Sleep( 1000 ); } return 0; }
Das Beispielprogramm kann folgendermaßen übersetzt und gestartet werden:
C:\temp\dynBib\win32> cl -GX linkaufrufer.cpp demodll.lib Optimierender Microsoft (R) 32-Bit C/C++-Compiler, Version 12.00.8168, fuer x86 Copyright (C) Microsoft Corp 1984-1998. Alle Rechte vorbehalten. linkaufrufer.cpp Microsoft (R) Incremental Linker Version 6.00.8168 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /out:linkaufrufer.exe linkaufrufer.obj demodll.lib C:\temp\dynBib\win32>linkaufrufer DllMain: DLL_PROCESS_ATTACH Summe von 0 und 0 ist 0; immer eins mehr ist 0 Summe von 1 und 0 ist 1; immer eins mehr ist 1 Summe von 2 und 1 ist 3; immer eins mehr ist 2 Summe von 3 und 1 ist 4; immer eins mehr ist 3 Summe von 4 und 2 ist 6; immer eins mehr ist 4 Summe von 5 und 2 ist 7; immer eins mehr ist 5 Summe von 6 und 3 ist 9; immer eins mehr ist 6 int-Ausnahme 125 gefangen! int-Ausnahme 125 gefangen! int-Ausnahme 125 gefangen! DllMain: DLL_PROCESS_DETACHTip: Welche dazugelinkten dynamischen Bibliotheken von einem Programm (oder einer Bibliothek wiederum) benötigt werden, kann man unter Windows mit dem Kommando DUMPBIN /imports erfahren.
Dies zeigt aber nur die direkt benötigten Bibliotheken an; davon wiederum abhängige muß man gegebenenfalls mit weiteren Aufrufen ermitteln.
Dafür gibt es ein anderes Programm Dependancy Walker (von Steve P. Miller), das einigen Entwicklungspaketen von Microsoft beiliegt.
Zur Laufzeit nachgeladene Bibliotheken (siehe Beispiel zum Laden einer Bibliothek zur Laufzeit) werden so allerdings auch nicht ermittelt.