Hi,
ich habe eine DLL geschrieben, die einen eigenen DragDropHandler implementiert. D.h. wenn ich mit der rechten Maustaste eine Datei per Drag & Drop in einen Ordner ziehe, erscheint ein von mir erstellter Kontextmenü-Eintrag, der sich auch problemlos ausführen lässt.
Mein Problem ist, dass Windows meine DLL beim ersten Verwenden in den Speicher lädt und nicht mehr freigibt. Wenn ich also meine kompilierte DLL testen will, klappt es beim ersten Mal gut. Wenn ich sie danach erneut kompilieren will, kann die Ausgabedatei nicht neu erstellt werden, weil sie noch in Verwendung ist. Wie kann ich Windows klarmachen, dass es die DLL nach der Verwendung wieder freigeben soll. (Ist meine erste echte DLL, seid also bitte etwas nachsichtig mit mir

)
Ich exportiere ja
DllCanUnloadNow. Die Funktion ist aber nirgends definiert. Ich habe viel Quellcode aus einem Beispiel ohne detaillierte Erklärung abgeschrieben, deshalb weiß ich nicht genau, ob das mein Problem ist und - falls ja - wie ich damit arbeiten kann.
Hat jemand einen Tipp für mich?
Vielen Dank im Voraus.
Gruß -- Andy aka fero
P.S.: Das hier ist meine Projektdatei:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| uses SysUtils, Classes, ComServ, ComObj, UDragDropHook in 'UDragDropHook.pas';
{$R *.res}
exports DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer;
begin
end. |
In der Unit
UDragDropHook steht u.a. folgender Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| (...)
type TDragDropHook = class(TComObject, IShellExtInit, IContextMenu)
(...)
const Class_DragDropHook: TGUID = '{FFFFF0E3-C65C-9A45-AF7F-815033B870EE}';
(...)
initialization TComObjectFactory.Create(ComServer, TDragDropHook, Class_DragDropHook, '', 'Drag&Drop Shell Extension', ciMultiInstance, tmApartment); |