AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Entladen eines Packages

Ein Thema von neolithos · begonnen am 4. Apr 2004
Antwort Antwort
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#1

Entladen eines Packages

  Alt 4. Apr 2004, 20:03
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;
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz