AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit BPL-Packages

Ein Thema von trashcandesign · begonnen am 18. Dez 2007 · letzter Beitrag vom 18. Dez 2007
Antwort Antwort
trashcandesign

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

Problem mit BPL-Packages

  Alt 18. Dez 2007, 14: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
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Problem mit BPL-Packages

  Alt 18. Dez 2007, 14:14
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
trashcandesign

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

Re: Problem mit BPL-Packages

  Alt 18. Dez 2007, 14:25


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!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Problem mit BPL-Packages

  Alt 18. Dez 2007, 14:27
Du musst doch nicht viel umschreiben. Einfach ein Laufzeitpackage erstellen, was die doppelte Unit einbindet, und dieses Laufzeitpackage dann unter "requires" eintragen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
trashcandesign

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

Re: Problem mit BPL-Packages

  Alt 18. Dez 2007, 14:45
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
  Mit Zitat antworten Zitat
trashcandesign

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

Re: Problem mit BPL-Packages

  Alt 18. Dez 2007, 14:52
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*
  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 14:22 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