Kann ich eine ctypes-CDLL explizit schließen?

9

Ich habe eine Python 2.7-GUI für die Interaktion mit einer C-Bibliothek. Ich mache eine Menge Setup in der GUI, dann drücke ich "go". Dann schaue ich mir Ergebnisse an und brauche den Bibliothekscode nicht mehr. Aber ich würde gerne den GUI-Zustand beibehalten, während ich die Bibliothek ändere.

Ich importiere die so oder dll mit ctypes , was offensichtlich die Datei zum Lesen öffnet. Aber ich möchte die Datei explizit schließen, um sie neu zu kompilieren und zu überschreiben. Dann, wenn ich den "Go" -Button erneut drücke, möchte ich die neue Version importieren.

Im schlimmsten Fall könnte ich die Datei in ein tempfile.NamedTemporaryFile kopieren, aber dann habe ich Handles für Dutzende von Dateien geöffnet, von denen ich nichts aufräumen kann.

Kann ich das Dateihandle irgendwie explizit schließen? Oder kann ich den Inhalt der Datei in ein StringIO -Objekt lesen und irgendwie ctypes darauf zeigen?

    
Cuadue 23.10.2013, 16:21
quelle

1 Antwort

4

Sie müssen das Handle für die DLL schließen, damit es zuerst freigegeben wird, damit Sie mit der Datei arbeiten können. Sie müssen das Handle der Bibliothek abrufen und es dann an FreeLibrary auf Windows, dann können Sie mit der DLL-Datei machen, was Sie brauchen:

%Vor%

Vorschau:

Hier ist eine Test-DLL:

%Vor%

Vorschau:

%Vor%

Unter Linux verwenden Sie dlclose , das wäre:

%Vor%

Hier ist ein ähnliches gemeinsames Objekt:

%Vor%

Vorschau:

%Vor%     
user1129665 23.10.2013, 17:20
quelle

Tags und Links