![]() |
Entladen eines Packages
Ich habe einen kleinen schweren Ausnahmefehler.
Ich versuche einen Programmteil der wenig gebraucht wird automatisch zuzuladen und wieder zu entfernen. Dazu verwende ich Packages. Beim Freigeben kommte es zu einer Fehlermeldung, die ich darauf zurückführe das ich Code-Ausführe den es durch UnloadPackage nicht mehr gibt. Wie kann ich nun das Package von sich selbst aus entladen?
Delphi-Quellcode:
var hPack : Cardinal;
// zum Laden sClsName : String; proc : TAppClassName; // zum Entladen mbi : TMemoryBasicInformation; I : Integer; fCls : TComponent; begin if IsRunning then // --------- Stopp -------- if VirtualQuery(Pointer(fRun.ClassType), mbi, SizeOf(mbi)) > 0 then begin hPack := Cardinal(mbi.AllocationBase); // (fRun as IAddInPre).PreDone; // Alle Componenten Freigeben for I := Application.ComponentCount - 1 downto 0 do begin fCls := Application.Components[I]; if (VirtualQuery(Pointer(fCls.ClassType), mbi, SizeOf(mbi)) > 0) and (Cardinal(mbi.AllocationBase) = hPack) then fCls.Free; end; // AppCtx freigeben FreeAndNil(fRun); // Package entladen UnloadPackage(hPack); Owner.fRunApps.Remove(Self); end else MessageDlg('Package <-> Klassen-Zuordnung schlug fehl!', mtError, [mbOk], 0) else begin // --------------- Run ------------- hPack := LoadPackage(sBpl); if hPack <> 0 then try proc := GetProcAddress(hPack, csClassNameFuncApp); if Assigned(proc) then begin sClsName := proc(); // Erstellen und Eintragen fRun := TComponentClass(FindClass(sClsName)).Create(fOwner.fModulOwner) as TPWAppCtx; with fRun as IAddInPre do begin SetInfo(Self); PreInit; end; Owner.fRunApps.Add(Self); end else raise Exception.Create('no classproc'); except UnloadPackage(hPack); MessageDlg('Package konnte nicht initialisiert werden!', mtError, [mbOk], 0); end else MessageDlg('Package konnte nicht geladen werden!', mtError, [mbOk], 0); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz