Zugriffsverletzung nach einbinden von dll



  • Hi,
    Da ich es nicht hinbekommen hab die lib datei in borland zum laufen zu bekommen, hab ich jetzt mal versucht die dll direkt einzubinden.
    Infos dafür hab ich mir aus den FAQ geholt. das sieht im moment bei mir so aus:

    //h Datei
    
    class BPMDetection
    {
    private:
       typedef int (DLLFUNCTION1)(void);
       typedef void (DLLFUNCTION2)(int);
       typedef double (DLLFUNCTION3)(int,int);
    
       DLLFUNCTION1   *pDllFunction1;
       DLLFUNCTION2   *pDllFunction2;
       DLLFUNCTION3   *pDllFunction3;
    
    public:
        BPMDetection();
        int BPM_Create(void);
        void BPM_Destroy(int bpm);
        double BPM_getParameter(int bpm,int param);
    };
    
    //cpp Datei
    
    BPMDetection::BPMDetection()
    {
       HINSTANCE hInstance;
    
       hInstance = ::LoadLibrary("bpmDetect.dll");
       pDllFunction1  = (DLLFUNCTION1*)::GetProcAddress((HMODULE)hInstance, "BPM_Create");
       pDllFunction2  = (DLLFUNCTION2*)::GetProcAddress((HMODULE)hInstance, "BPM_Destroy");
       pDllFunction3  = (DLLFUNCTION3*)::GetProcAddress((HMODULE)hInstance, "BPM_getParameter");
    }
    
    int BPMDetection::BPM_Create(void)
    {
        int iResult;
    
        if (pDllFunction1)
            iResult = (*pDllFunction1)();
    
    }
    
    void BPMDetection::BPM_Destroy(int bpm)
    {
       // void iResult;
    
        if (pDllFunction2)
            (*pDllFunction2)(bpm);
    
    }
    
    double BPMDetection::BPM_getParameter(int bpm,int param)
    {
        double iResult;
    
        if (pDllFunction3)
           iResult =(*pDllFunction3)(bpm,param);
    }
    

    Wenn ich jetzt die funktion BPM_Create() aufrufe, funkioniert das auch. ich bekomme einen Wert zurück und alles ist supi. Aber wenn ich jetzt die Funktion BPM_getParameter aufrufe, kommt "Zugriffsverletzung bei Adresse [..] . Schreiben von Adresse [...]." Der fehler weist doch normalerweise auf nen Zeigerfehler hin, aber ich seh da nicht wirklich einen zusammenhang.

    Kann mir villeicht jemand sagen ob da ein fehler drin ist, oder wodran das liegen könnte??

    Danke schonmal



  • Es gibt da 2 Möglichkeiten:

    1. Die Funktion wurde in der DLL nicht gefunden. Dann enthält pDllFunction3 eine 0.
    2. Die Funktion in der DLL verursacht diese Fehlermeldung.

    Edit: Sowie ich das sehe, kommt Möglichkeit 2 in Betracht, denn du fängst einen Nullzeiger ja schon ab 😉



  • Danke für die antwort!

    Gibt es den ne möglichkeit herausfinde warum die funktion in der dll einen fehler macht?



  • Hallo

    Grundsätzlich mit dem Debugger.
    Wobei du aber erstmal überprüfen solltest, ob du wirklich richtige Funktionsprototypen castest, und ob du wirklich die richtigen Parameter übergibst.
    Vielleicht brauchst du auch eine andere vorbereitende Funktion zwischen Create und GetParameter?
    Jedenfalls läßt sich für uns hier nur aufgrund des geposteten Codes kein Fehler finden. Schau lieber in die Doku der Library.

    bis bald
    akari


Log in to reply