Christian Seiler: Funktionsverwaltung bei C

Beitrag lesen

Hallo,

Es kommen in Zukunft noch viele weiteren Funktionen hinzu und deswegen hatte ich die Idee, die Funktionen einzeln in DLL's(?) zu kompilieren und so das Programm nur noch daraus besteht, die Dateien aus dem Ordner auszulesen, das Manü zu generieren und funktionalität reinzubringen.
Kann so etwas funktionieren? Wenn ja, wie?

Naja, wenn Du unter Windows arbeitest, dann kannst Du DLLs dynamisch nachladen und dann funktionen aus diesen DLLs aufrufen. Dazu gibt es unter Windows die Funktionen LoadLibrary und GetProcAddress.

Im folgenden mal ein ungetestetes Codebeispiel, sollte aber funktionieren:

DLL-Code:

int __declspec(dllexport) meineTolleFunktion (int a, double b) {  
  // mach was tolles  
}

Ausführbarer Code:

// Zeiger auf die Funktion definieren  
int (*referenz)(int, double);  
const char *dllDatei = "meinedll.dll";  
HMODULE dllReferenz;  
int resultat;  
  
dllReferenz = LoadLibrary(dllDatei);  
if (!dllReferenz) {  
  // Fehler, nutze GetLastError(), um die Ursache zu finden  
  return ...;  
}  
  
referenz = (int (*)(int, double)) GetProcAddress(dllReferenz, "meineTolleFunktion");  
if (!referenz) {  
  // Fehler!  
  // DLL entladen  
  FreeLibrary(dllReferenz);  
  // Fehler mit getLastError() bestimmen, behandeln  
  return ...;  
}  
  
// Funktion aufrufen  mit ein paar werten  
resultat = referenz (1, 2.0);  
  
// DLL entladen  
FreeLibrary(dllReferenz);  
  
// Fertig.

Das sollte das Grundprinzip erklären, ich hoffe, das hilft weiter. Du kannst die DLL natürlich auch nur ganz am Anfang des Programms laden, dann geladen lassen und am Ende des Programms erst entladen oder so etwas.

Viele Grüße,
Christian