Dll nach freigabe mit DeleteFile nicht löschbar



  • Hallo zusammen.

    Ich binde eine Dll ein und gebe sie wieder frei

    //net DLL
    handle = LoadLibrary(TEXT("net.dll")); 
    if (handle != NULL)
    { 
    	pNet = (DLLnet_1)GetProcAddress(handle, "Class_net_version");
    	if (!pNet)
    		MessageBox("Net.dll Fehler", NULL, MB_OK );
    	else
    		Net = pNet();
    } 
    
    Net->init(buffer);
    
    delete Net; Net = NULL;
    
    if(!FreeLibrary(handle))
    	MessageBox("Net.dll FreeLibrary Fehler", NULL, MB_OK );
    

    Danach möchte ich die Dll löschen

    if(!DeleteFile("net.dll"))
    {
        if(GetLastError() == ERROR_ACCESS_DENIED)
    	MessageBox("Net.dll ERROR_ACCESS_DENIED", NULL, MB_OK );
        if(GetLastError() == ERROR_FILE_NOT_FOUND)
    	MessageBox("Net.dll ERROR_FILE_NOT_FOUND", NULL, MB_OK );
    }
    

    als Antwort bekomme ich aber ERROR_ACCESS_DENIED.

    Wiso ist die Dll gesperrt, auch kein anderes Prog greift darauf zu.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • if(!FreeLibrary(handle))
        MessageBox("Net.dll FreeLibrary Fehler", NULL, MB_OK );
    

    Wie wäre es mal mit einem Aufruf von GetLastError, um im Fehlerfall eine sinnvolle Fehlermeldung zu erhalten, anstatt so einer nichts sagenden?

    Wie schnell nach dem Freigeben versuchst du zu löschen? Eventuell braucht Windows noch etwas Zeit die DLL zu löschen?


  • Mod

    Wenn die DLL Backlinks auf andere DLLs hat, d.h. Der Referenzcount wird durch andere DLLs hochgezählt, dann kannst Du die Datei nicht löschen.

    Bist Du sicher, dass Du die DLL nur implizit lädst? Trace mal mit DEPENDS.EXE



  • Mit DeleteFile löscht man vom Programm selbst angelegte Ausgabedateien, die z.B. in der Releaseversion den Anwender nichts mehr angehen (etwa Testprotokolle). Eingabedateien schliesst man mit einem close. Wozu willst du eine DLL löschen?



  • ALso das ist eine selber erstellte Dll, auch wenn ich den Rechner nez starte und sofort die Aktion mit dem löschen ausühre wird es geblockt.

    if(!FreeLibrary(handle))
        MessageBox("Net.dll FreeLibrary Fehler", NULL, MB_OK );
    

    spielt keine rolle, da es keinen Fehler gibt.

    Ich möchte die alte Dll löschen um eine neue einspielen zu können.

    Ich habe es jetzt so gemacht, das ich die alte umbennene und beim 2ten Start des Programms dann die umbenannte lösche, das geht.


Anmelden zum Antworten