Problem beim Einbinden einer DLL



  • Ich habe Probleme damit, eine DLL in ein Projekt von mir einzubinden. Und zwar ist das diese hier:

    #include <windows.h>
    
    #define EXPORT extern "C" __declspec(dllexport)
    
    EXPORT int test() {
      MessageBoxA(NULL,"test","TEST",MB_OK);
      return 0;
    }
    

    Wenn ich der DLL eine DllMain() hinzufüge und dann eine MessageBox() aufrufe, wenn call == DLL_PROCESS_ATTACH ist, wird die MessageBox() aufgerufen... Aber nur dann... Merkwürdig...

    bool APIENTRY DllMain(HANDLE hModule, DWORD call, LPVOID lpReserved)
    {
    	if(call == DLL_PROCESS_ATTACH)
    	{
    		MessageBox(NULL, "Dll Loaded...", "", MB_OK | MB_ICONWARNING);  
    	}
    
    	return true;
    }
    

    Kann jmd. helfen?

    Danke!



  • und was soll Daran merkwürdig sein 😕



  • ??????? schrieb:

    und was soll Daran merkwürdig sein 😕

    Naja, die MessageBoxA(NULL,"test","TEST",MB_OK); wird nicht aufgerufen. Warum?

    Das ist meine komplette DLL:

    #include <windows.h>
    
    #define EXPORT extern "C" __declspec(dllexport)
    
    EXPORT int test() {
      MessageBoxA(NULL,"test","TEST",MB_OK);
      return 0;
    }
    


  • skullyan schrieb:

    Warum?

    skullyan schrieb:

    if(call == DLL_PROCESS_ATTACH)
        {
            MessageBox(NULL, "Dll Loaded...", "", MB_OK | MB_ICONWARNING);  
        }
    

    eine ganz normale if-bedingung eben 😮 wenn die Bedingung in der Klammer(call==DLL_PROCESS_ATTACH) wahr ist wird deine Funktion aufgerufen und sonst eben nicht.

    außerdem warum sollte die Funktion test sonst ausgeführt werden? sie wird in der Dll nur definiert(fast wie in einer headerdatei; da wird eine funktion beim Kompilieren ja auchn icht ausgeführt...), um sie zu verwenden musst du sie irgendwie in ein anderes Programm (zB Konsolennwendung) importieren,
    zB mit

    __declspec(dllimport) test();
    

    dort kannst du sie dann verwenden; eine dll ist nur eine Art Programmbibliothek.

    edit: grundsätzlich geht das mit dlls so:
    du schreibst dir eine dll die einige Funktionen beinhaltet(zB deine Funktion test()); diese Funktionen kannst du dann in einem anderen Programm (zB einer Konsolenanwendung) wieder importieren und praktisch so benutzen wie wenn du sie in der quelldate der Konsolenanwendung definiert hätest^^

    dlls dienen hauptsächlich dazu häufig benötigten code zur verfügung zu stellen sodass man ihn nicht jedesmal neu schreiben muss^^

    mfg,
    andi01.


Anmelden zum Antworten