DLL und Funktionszeiger



  • Hi,

    habe ne DLL mit LoadLibrary(...) geladen und mit GetProcAddress(...) bekomme ich nen Zeiger auf die Funktion, welche die DLL exportiert.
    zwei Fragen:
    1. Warum muss ich immer erst ein einen Typ definieren
    (z.B. typedef int (* p_fn1)(DWORD*, char*, char*, char*, char*);)
    um der Funktion auch Parameter mitzugeben?

    2. ich versuche innerhalb der DLL dem DWORD* einen Wert zuzuweisen, leider ist im aufrufenden Programm der DWORD* trotzdem noch NULL. Warum?

    Danke.

    mfg BausO



  • Hi,
    Zu 1.) Du musst nicht zwingend typedef bennutzen, folgendes ist auch möglich aber nicht gerade der guten Lesbarkeit dienlich:
    int (* p_fn1)(DWORD*, char*, char*, char*, char*) = int ()(DWORD, char*, char*, char*, char*) GetProcAddress(....)

    Zu 2.) Folgendes Beispiel

    void fn(DWORD *pa)
    {
    pa = NULL;
    }

    a ist nur eine lokale Kopie des übergebenen Parameters, d.h. nur gültig im Funktionsrumpf, du kannst allerdings mit z.B. *pa = 0 den Wert der Variable auf die pa zeigt verändern. Willst du einen Zeiger dauerhaft verändern wäre dies denkbar:

    void fn(DWORD **ppa)
    {
    *ppa = NULL;
    }

    Hoffe dies hilft dir etwas weiter
    MFG



  • Huch, Kleiner Fehler es muss so heissen:
    int (* p_fn1)(DWORD*, char*, char*, char*, char*) = (int ()(DWORD, char*, char*, char*, char*)) GetProcAddress(....)


Anmelden zum Antworten