2016-07-29 33 views
-4

Im reposting etwas, fragte ich vor zwei Tagen - aber ich habe mich nicht klar zu erklären.C# Dll entladen sich? Ist es möglich,

Ist es möglich, eine injizierte C# dll zu bekommen, um es selbst zu entladen, nachdem es seine Funktion ausgeführt hat?

Ich kann meine C# dll in ein C++ - Programm laden, aber das Entladen ist schwierig. Ich kann dies dank Robert Giesecke's Unmanaged Exports tun.

Im Wesentlichen lädt das C++ - Programm alle DLLs in einem angegebenen Ordner und führt die exportierte Funktion _start() aus.

Ich möchte eine persönliche C# -Dll mit der Exportmethode _start() "injizieren", die ich erfolgreich erreicht habe. Das C++ - Programm wird die Funktion laden und ausführen, aber nicht programmiert, um sie danach zu entladen. Ich möchte die C# dll am Ende der _start() -Methode, um sich irgendwie zu entladen.

Ich habe versucht, den Import FreeLibraryandExitThread() aufrufen, in der C# dll als eigenen Thread starten

t.Thread(() => FreeLibraryandExitThread()); t.Start();

aber es funktioniert nicht ... Ich bin nicht sicher, ob es mehr zu Dies ist eine verwaltete DLL, ich habe gesucht und gefunden, dass diese Methode für C++ - DLLs funktioniert.

Dank

+0

Verwenden Sie eine App-Domäne. –

Antwort

0

Ich glaube nicht, dass es funktioniert. Aufruf von FreeLibrary mit einem Handle von außen (LoadLibrary wäre von einem Bereich außerhalb der DLL aufgerufen worden), da der Code an einem Speicherort läuft, der nicht mehr gültig ist.

Auch wenn das möglich ist, riecht es nach einem schlechten Design. Vielleicht möchten Sie einen Updater oder Ähnliches machen. Erklären Sie etwas mehr, was das Ergebnis ist, das Sie erwarten. Das Entladen einer DLL aus sich heraus ist nicht der richtige Weg.