4.2 Windowsversion

// 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_DETACH
Tip: 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.



www.wachtler.de