GetProcAdress - Funktion aus DLL laden



  • hallo!

    ich möchte eine Funktion -

    extern "C" { 
    _declspec(dllexport) HelloWorld(char* text) 
    { 
    //... 
    } 
    }
    

    - aus einer DLL laden.
    also:

    HINSTANCE hhelp; 
    hhelp= LoadLibrary("insert.dll"); 
    GetProcAddress(...,...);
    

    Die DLL wird erfolgreich geladen, nur wie gelange ich zur Funktion?
    und welche PARAMETER erhält GetProcAddress?
    hat jemand ein Beispiel?

    mfG (c)h



  • Kannst du nicht Google oder die Forensuche benutzen um Beispeile zu GetProcAddress zu finden?



  • na gut.. dann nehmen wir mal einen Beispielcode:

    #include<windows.h>
    void main()
    {
        HMODULE myLib = NULL; 
        DLLPrcInst SetHook = NULL; 
    
        myLib = LoadLibrary ("insert.dll"); 
    
        if (myLib == NULL) 
            MessageBox (NULL, "Fehler beim Laden der DLL", "Error", MB_OK); 
    
        SetHook = (DLLPrcInst)GetProcAddress (myLib, "HelloWorld"); 
    
        if (SetHook == NULL)
            MessageBox (NULL, "Fehler beim Laden der Funktionen", "Error", MB_OK); 
        FreeLibrary (myLib); 
    }
    

    (tolles beispiel 😉 funktioniert nicht mal):
    "DLLPrcInst" kennt mein compiler nicht
    folglich kann ich DAS nicht mal testen.

    DANN NOCH: woher weiss man, wie die funktion also "HelloWorld" heisst, weil ich glaube, DAS ist es nicht ganz
    mfG (c)h



  • Dann such ein vernünftiges Beispiel das komplett ist.

    Bei deiner eigenen DLL solltest du schon die Namen wissen, oder falls es eine Fremd-DLL ist muss es irgendwo dokumentiert sein. Den Namen kann man auch über das Tool "Dependency Walker" rausfinden, aber nicht die Parameter.



  • woher bekomme ich das Tool?



  • Oh man du bist echt zu doof.

    Google benutzen



  • *dachte nicht, dass das programm so bekannt ist, oder das es so eindeutig zu identifizieren sein wird*
    aber: mal googlen



  • #include <stdio.h> 
    #include <windows.h> 
    
    typedef void/*rückgabewert*/ (_cdecl* FUNC)(/*parameter*/); 
    
    void loadDLL()
    {     
    	HINSTANCE hDLL = LoadLibrary("dllname.dll");     
    
    	if(hDLL != NULL)
    	{ 
    		printf("DLL geladen."); 
    		FUNC function1 = (FUNC)GetProcAddress(hDLL, "funktionsname"); 
    		function1();
    		FreeLibrary(hDLL); 
    	}
    	else
    	{ 
    		printf("DLL nicht geladen."); 
    	} 
    } 
    
    void main() { 
        loadDLL(); 
    }
    

    Damit mal irgendwo ein (bei mir) funktionierender code steht. (man findet ja sonst nur fehlerhafte codes)

    PS.: es funktioniert, aber wenn ich was besser machen kann, oder falsch verstanden habe: bitte melden 😉

    mfG (c)h



  • Den Rückgabewert von GetProcAddress auf NULL prüfen


Anmelden zum Antworten