Zugriff auf Dll - Access Violation



  • Moin,

    ich habe hier ein CodeBeispiel für den Dialog gesteuerten Zugriff auf eine dll, welche mir Adress Daten aus einer Datenbank sucht. An der Dll & der Datenbank lässt sich auch nichts ändern. Nun habe ich versucht, dass Programm derart anzupassen, dass ich eine Konsolenanwendung mit MFC unterstützung anpassen habe, der ich die Suchkriterien als Übergabeparameter der exe mitgebe und die Datensätze in einem einzigen Ausgabestring zurückbekomme. Leider scheint nun der Zugriff auf die dll nicht mehr zu funktionieren 😞

    Hier der Code:

    long PSearch(HINSTANCE theDllHdl, BYTE Fuzzy) {
    	long ( *DLLSearch)(BYTE Fuzzy);
    
        DLLSearch = (long( *)(BYTE)) GetProcAddress(theDllHdl, "Search");
        return DLLSearch(Fuzzy); 
    }
    

    Ich bekomme für DLLSearch auch ein Ergebnis. Nur leider bekomme ich beim return jedesmal folgende Fehlermeldung:

    Unbehandelte Ausnahme in AdressSuche.exe (ktdev32n.dll): 0xC0000005: Access Violation. (Falls wer Assembler mag: 009FC744 sal byte ptr [eax-60h],0)

    Irgendwas scheint mit dem Zugriff auf die dll nicht zu funktionieren. Normalerweise muss die dll im selben Verzeichnis wie die exe liegen, um zu Funktionieren. Interessanterweise bekomme ich aber genau dieselbe Fehlermeldung, wenn die dll gar nicht vorhanden ist. Da das ganze aber im MFC - Dialog funktioniert kanns also am Aufruf eigentlich nicht liegen. Könnt Ihr mir da vielleicht weiterhelfen?

    Vielen Dank
    Frank



  • Hallo,
    hast Du auch LoadLibrary aufgerufen ? bzw. ist die DLL ein ActiveX dingens ?



  • Ja, die dll habe ich voher erfolgreich(!) mit LoadLibrary aufgerufen. Hmm, hab grade mal die dll aus dem normalen Verzeichnis gelöscht und die Initialisierung war immer noch erfolgreich. Irgendwo ist da wohl der Wurm drin ...

    Keine Ahnung wo er sich die DLL erholt, wenn ich keinen expliziten Pfad angebe und die dll aus dem aufrufenden Verzeichnis lösche. Habe aber die richtigkeit der Initialisierung noch einmal mit expliziter Pfadangabe überprüft. Es funktioniert. Nur der 1. Aufruf einer Funktion der dll klappt nicht 😞



  • Hm,

    DLLSearch = NULL ?

    theDllHdl ist ok ?
    Search ist in der DLL auch vorhanden ?

    Es ist eine simple DLL und kein ActiveX dingens ?



  • theDllhdl ist ok. Search ist eine Funktion der aufzurufenden Dll.
    dllSearch liefert eine, kürzlich geänderte, Adresse zurück.
    Über die dll hab ich leider keine genaueren Auskünfte, da ich sie nicht selber erstellt habe. Ich weiss nur das es sich um eine Windowsstandard dll handelt, die man zumindest in VB & wie eine gewöhnliche dll einbinden kann.


Anmelden zum Antworten