Thema: Delphi Problem mit BPL-Packages

Einzelnen Beitrag anzeigen

trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

Problem mit BPL-Packages

  Alt 18. Dez 2007, 15:08
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*
  Mit Zitat antworten Zitat