So richtig die DLL geladen?



  • Mal eine kleine Frage. Ich lade normalerweise so eine DLL

    typedef int TFunc(int value = 5);
    	TFunc *Func;
    
    	HINSTANCE DLL = NULL;
    	DLL = LoadLibrary("Custom.dll");
    	if (DLL)
    	{
    		puts("DLL geladen");
    		Func = (TFunc*)GetProcAddress(DLL, "Func");
    		if (Func)
    		{
    			printf("Rückgabe: %d",Func());
    		}
    
    		FreeLibrary(DLL);
    	}
    
    getch();
    

    Er gibt mir auch einen Wert zurück (ob sinnvoll kann ich jetzt noch nicht sagen), jedoch crasht auch nach getch()(Programmende)

    Sieht jemand einen Fehler bzw warum oder kann mir eine alternative zeigen, wie man sonst noch DLL lädt?

    Es gibt da ja noch dllimport, aber damit habe ich noch nie was gemacht.



  • Das Laden sieht gut aus. Was kommt den für ein Crash?
    Wen ich raten soll: ist die DLL-Funktion als stdcall definiert und nicht cdecl?



  • Pellaeon schrieb:

    Das Laden sieht gut aus. Was kommt den für ein Crash?

    "exe hat ein Problem festgestellt und muss beendet werden."

    Pellaeon schrieb:

    Wen ich raten soll: ist die DLL-Funktion als stdcall definiert und nicht cdecl?

    Wie genau meinst das? Ich bin nicht so der DLL-Experte.

    Ich lade die DLL ja so

    typedef int TFunc(int value = 5);
    TFunc *Func;
    

    Ich weiss das es soetwas gibt:

    extern "C" __declspec(dllimport)double Func(int value = 5);
    

    Aber ich glaube das ist VC++ only oder?
    Da erhalte ich auch nur ein: "error LNK2001: Nichtaufgeloestes externes Symbol __imp__Func"
    Das geht wohl nur wenn die DLL in EXE eingebunden ist oder?
    Ich möchte diese aber dynamisch laden.



  • Hast du die DLL selber geschrieben, ja?



  • nope, das eine Fremd-DLL



  • Ups zu früh. Aber das habe ich dazubekommen.

    extern "C" {
    #define funktion __declspec(dllexport)
    funktion int __stdcall Func(int value = 10);
    }
    


  • typedef int __stdcall TFunc(int value = 5);
    

    mach mal das bei dir 🤡



  • Ahhh, super! Jetzt klappt es wunderbar. Vielen lieben Dank für die Hilfe!


Anmelden zum Antworten