Problem mit dynamischen Laden von DLLs

bitmaster5714

Grünschnabel
Hi!

Ich hatte die Idee zur Übung von DLLs ein kleines Plugin-System in C++ zu schreiben.
Nun bin ich schon fast fertig. Ich habe die DLLs geschrieben, getestet und sie gehen.
Im Moment bin ich jedoch auf ein Problem gestoßen bei dem ich keine Lösung finde:
Mein Plugin-System lädt die DLLs schon, aber es endet immer mit einer Zugriffsverletzung (komischerweise beim FreeLibrary Befehl). Ich konnte mit dem Turbo Debugger von Borland die Stelle ausmachen jedoch kenne ich keine Problemlösung. Ich zeig euch mal ein paar Quellen (wundert euch nicht über den Namen des 2.Plugins(es wird nicht beabsichtigt einen insterstellaren Raumkreuzer zu starten :-) ):

Test-Plugin 1: uebung1.dll (uebung1.cpp)
Code:
#include <windows.h>

#ifdef __cplusplus
extern "C" {
#endif

__declspec(dllexport) char *GetName() {
 char *buffer = "Test Dynamic Link Library 0.1";
 return buffer;
}
#ifdef __cplusplus
}
#endif

Test-Plugin 2: startraumkreuzer.dll (startraumkreuzer.cpp)
Code:
#include <windows.h>

#ifdef __cplusplus
extern "C" {
#endif

__declspec(dllexport) char *GetName() {
 char *buffer = "Bibliothek zum Starten interstellarer Raumkreuzer 0.1 a\000";
 return buffer; 
}

#ifdef __cplusplus
}
#endif

Nun das Ladeprogramm:
Code:
#include <windows.h>
#include <iostream>

typedef char *(*GETNAME) ();

using namespace std;

void initError(int code) {
 switch(code) {
  case 1: MessageBox(NULL, "Fehler beim Finden von Plugins", "Fehler", MB_OK | MB_ICONSTOP); break;
  case 2: MessageBox(NULL, "Fehler beim Laden des Plugins", "Fehler", MB_OK | MB_ICONSTOP); break;
  case 3: MessageBox(NULL, "Fehler beim Initialisieren des Plugins", "Fehler", MB_OK | MB_ICONSTOP); break;
 
 }
 
}

void main(void) {
 char *PlugName = NULL;
 GETNAME GetName = NULL;          // Funktionspointer zum Identifizieren
 HANDLE hFind = NULL;             // Findhandle
 HINSTANCE hDLL = NULL;           // DLL-Handle
 LPWIN32_FIND_DATA lw32fd; // Find Structure
 hFind = FindFirstFile("*.dll", lw32fd);        // Plugin-Dateien finden

 // Diverse Fehler die Auftreten können werden abgefangen
 if(hFind == INVALID_HANDLE_VALUE) {initError(1); return;} 

 cout << "Found:" << lw32fd->cFileName  << endl;
 hDLL = LoadLibrary(lw32fd->cFileName);
 if(hDLL == NULL) {initError(2); return;}
 GetName = (GETNAME) GetProcAddress(hDLL, "_GetName");
 if(GetName == NULL)  {initError(3); FreeLibrary(hDLL);return;};

 printf("Loaded: %s", GetName()); 
// Unfertig. Wird später um FindFileNext() usw. erweitert...
/* while(true) {
  
 
  break;
 }*/
 FreeLibrary(hDLL);
 //return;
}

Wenn Ihr ebenfalls keine Lösung findet, oder nur keinen Bock habt, dann ist das auch
nicht so schlimm. Ist ja nur eine Übung.

Vielen Dank schon für das Durchlesen des Themas.
cu.
 
hi, ich denke mal du hast die 3te der directory suchanweisungen vergessen: FindClose();

wenn du die nicht einfügst bekommst du eben diese zugriffsverletzungen ...

hoffe ich konnt helfen

mfg,

-Xyon-

P.S.: hups, sehs jetzt erst ... 1 Jahr verspätung ^^ dummes Google ;)
naja, besser spät als nie *g
 
Zuletzt bearbeitet von einem Moderator:
Zurück