Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit BPL-Packages (https://www.delphipraxis.net/105231-problem-mit-bpl-packages.html)

trashcandesign 18. Dez 2007 14:08


Problem mit BPL-Packages
 
Moin,

ich habe ein Hauptprogramm, in das verschiedenene Plugins/Module oder wie man es nennen möchte geladen werden sollen.

Mit einem Package funktioniert das auch einigermaßen gut

Aber sobald ich ein zweites Package laden möchte gibt er mir beim Programmstart folgenden Fehler aus:
Zitat:

Cannot load package 'PL_S_0002'. It contains unit 'UMPPluginInterface', which is also contained in package 'PL_S_0001'
So weit so schlecht.

Jetzt habe ich hier den Hinweis gelesen, die gemeinsam benötigten Dateien in ein weiteres Package auszulagern.
Allerdings funtkioniert das bei mir nicht wirklich, da da Dateien dabei sind, die wiederum auf Dateien aus den jeweiligen Packages zugreifen müssen.

Momentan habe ich das hier:
Delphi-Quellcode:
//HKR Schnittstelle
  try
    if LoadPackage(productVer.SpecialPath(MPSP_PLUGIN_PATH)+'PL_S_0001.bpl') <> 0 then
    begin
      PL_S_0001 := GetClass('HKRSchnittstelle');

      if PL_S_0001 <> nil then
      begin
        AObject := TComponentClass(PL_S_0001).Create(Application)
          as TComponent; // create as base class, like normal

        if Supports(AObject, IHKRInterface) then
          IHKRObject := AObject as IHKRInterface;

        if Assigned(IHKRObject) then
        begin
          IHKRObject.initialize(DMAbteilung.dbAbtZeos, DMSystem.dbSystemZeos, sAktBNHdz, sProgrammSprache, bAktAdmin, THKRMeinArrayType(aSprache), THKRMeinArrayType(aCalKeys));
        end;
      end;
    end;
  except;
  end;

  //LFV_SH Schnittstelle
  try
    if LoadPackage(productVer.SpecialPath(MPSP_PLUGIN_PATH)+'PL_S_0002.bpl') <> 0 then
    begin
      PL_S_0002 := GetClass('LFV_SHSchnittstelle');

      if PL_S_0002 <> nil then
      begin
        AObject := TComponentClass(PL_S_0002).Create(Application)
          as TComponent; // create as base class, like normal

        if Supports(AObject, ILFV_SHInterface) then
          ILFV_SHObject := AObject as ILFV_SHInterface;

        if Assigned(ILFV_SHObject) then
        begin
          ILFV_SHObject.initialize(DMAbteilung.dbAbtZeos, DMSystem.dbSystemZeos, sAktBNHdz, sProgrammSprache, bAktAdmin, iAktBNID, TLFV_SHMeinArrayType(aSprache), TLFV_SHMeinArrayType(aCalKeys));
        end;
      end;
    end;
  except;
  end;
Und genau beim zweiten LoadPackage kracht es.

Nun die Frage gibt es eine Möglichkeit Delphi zu sagen, dass er das trotzdem laden soll, bzw. das erste Package wieder so rauszuschmeißen, dass das zweite geladen werden kann?

ich habe schon versucht das erste Package mit UnloadPackage rauszuschmeißen, aber der Fehler kommt trotzdem!?

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt *g*

chaosben 18. Dez 2007 14:14

Re: Problem mit BPL-Packages
 
Die imho einzige saubere Methode ist die, die du schon angeführt hast. Einfach die mehrfach benutzten Dateien in viele kleine Packages aufteilen und dann importieren.

Ein schmutzige Variante ist das Umbenennen dieser Dateien, so das sie in jedem Package anders heißen.

trashcandesign 18. Dez 2007 14:25

Re: Problem mit BPL-Packages
 
:?

gibt es ne möglichkeit diese packages sauber wieder raus zu schmeißen?
Das mit dem weiteren Package wäre nicht ganz so optimal, da dann hier alles mögliche umgeschrieben werden müsste.

Ich dachte mir, ich könnte das eine package rausschmeißen und dann das andere laden. Es ist ja nicht nötig, dass beide gleichzeitig laufen. Aber mit UnLoadPackage funktioniert das erneute laden halt einfach nicht!

Apollonius 18. Dez 2007 14:27

Re: Problem mit BPL-Packages
 
Du musst doch nicht viel umschreiben. Einfach ein Laufzeitpackage erstellen, was die doppelte Unit einbindet, und dieses Laufzeitpackage dann unter "requires" eintragen.

trashcandesign 18. Dez 2007 14:45

Re: Problem mit BPL-Packages
 
doch, weil alle Dateien wieder auf anderen aufbauen usw.
Ich weiß extrem unsauber und sch*, aber immo haben wir nicht wirklich die Zeit den Quelltext mal komplett zu überarbeiten.
Also müssen wir schauen, wie wir damit zurecht kommen :(

trashcandesign 18. Dez 2007 14:52

Re: Problem mit BPL-Packages
 
So, ich hab es jetzt aus einer Mischung der beiden Möglichkeiten gemacht *args*

Sprich das was ging ausgelagert, und alles andere umbenannt.
Wir zeit, das wir das ganze hier mal überarbeiten *gg*


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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