2011-08-20 13 views
5

Jaki jest najlepszy sposób wdrożenia zewnętrznego systemu modułów dla aplikacji DELPHI?Implementacja modułów zewnętrznych

Co potrzebne jest bardzo proste, naprawdę:

  • Głównym APP wykrywa, czy moduł jest obecny i ładuje go (Czas pracy)
  • Moduły można zapisać formularz
  • Moduły mogą przechowywać DataModules
  • Moduły można przechowywać kod

Potrzebuję użyć formularzy sklepu w innych formach, a tylko jako standAlone

używam coś takiego

 if Assigned(pNewClass) then begin 
      Application.CreateForm(pNewClass, _lFrm); 
      _lFrm.Hide; 
      _lFrm.BorderStyle := bsNone; 
      _lFrm.Parent := pBasePNL //(TPanel); 
      _lFrm.Align := alClient; 
     end; 

Więc tworzę TForm, ale umieścić go wewnątrz TPanel.

Jeśli chodzi o moduły DataModules, przechowuję magazyn ImageLists, aby ideia zmieniała aplikacje ICO tylko nieznacznie zmieniając moduł zewnętrzny.

Jaki jest najlepszy sposób, aby to osiągnąć?

Sprawdzono BPL w czasie wykonywania, ale wydaje się, że nie rozumiem, jak to zrobić. Dzięki.

UPDATE: .....................................

Po przeczytaniu niektórych powiązanych pytań i odpowiedzi myślę, że znalazłem moją odpowiedź i rozwiązanie.

http://edn.embarcadero.com/article/27178

Artykuł jest stare rzeczy, ale zadziwiająco proste.

Dobrze logika jest tam po prostu nie wydają się uzyskać to, aby pokazać formy 

Ja właśnie testuje przykład 2

Ładuje BPL, ale nie dostać w postaci:

AClass := GetClass('TForm2'); 

Always retrievex 'nil'

Ale BPL gdyż zarejestrowany:

RegisterClass(TForm2); 

Czy ktoś może pomóc w tym.

+1

Możesz znaleźć więcej informacji, jeśli szukasz wtyczek –

+0

To naprawdę jest duplikat, po prostu spójrz na listę powiązanych pytań po prawej –

+0

Właśnie, dzięki. Właśnie znalazłem tam moje rozwiązanie. – Jlouro

Odpowiedz

2

Zrobiłem wam demo, tak łatwo zacząć! Jednak ... Rozpoczęty nie jest zakończony.

Za każdym razem, gdy zacząłem używać wtyczek, później żałowałem tego. Jednak, jak mówisz, chcesz binarny system wtyczek. Zatem BPL są właściwym rozwiązaniem. David sugeruje używanie interfejsów (ze zwykłymi bibliotekami DLL zamiast pełnego pakietu runtime BPL), co rozwiąże niektóre z często spotykanych problemów niestabilności BPL spowodowanych brakiem wersjonowania twoich klas, a więc zależności zależnych od aplikacji i paczek, prawidłowo. Jeśli nie potrzebujesz współużytkowania pamięci i nie musisz używać pliku borlandmm.dll (zarządzanie pamięcią dzieloną), prosta biblioteka DLL z interfejsami będzie działać poprawnie.

Jeśli możesz zrobić wszystko, co musisz zrobić, po prostu skryptów i sprawiają, że system wtyczek z tylko skryptów, a następnie zrobić to w ten sposób. Jeśli możesz uciec z bibliotekami DLL, interfejsami i brakiem współużytkowania pamięci, użyj zwykłych bibliotek DLL. Jeśli musisz udostępnić pamięć i typy klas, a następnie tak, użyj BPL.

Pamiętaj, że używanie BPL (pakietów uruchomieniowych) wiąże się z wieloma efektami ubocznymi, których możesz się nie spodziewać. Największe aplikacje oparte na BPL, nad którymi pracowałem, były bardziej bałaganem i mniej stabilne niż jakiekolwiek monolityczne aplikacje, nad którymi pracowałem. Wygląda na to, że można tylko sosować paczki, dopóki ich nie spróbujesz, a potem znajdę, znowu sosnę dla monolitów.

Jeśli poprawnie używasz pakietów BPL i prawidłowo wtyczki do wersji, wszystko jest w porządku. BPL są świetne. Ale w realnym świecie wydaje się, że rozsądna wersja i kompatybilność ABI oraz interoperacyjność i stabilność są na wagę złota.

Aktualizacja: Zrobiłem wam demo to jest here (plugin_r2.zip). Zostało to wykonane w Delphi XE, ale jeśli używasz starszej wersji delphi, po prostu usuń pliki .dproj i otwórz plik .dpr dla głównej aplikacji i .dpk dla pakietu.

+0

Potrzebuję przechowywania formularzy, datamodułów i zasobów wewnątrz BPL. Celem jest stworzenie dodatkowych modułów dla głównej aplikacji, którą daję klientowi, lub nie. Za każdym razem, gdy buduję główny, przebuduję moduły (BPL). Wersja DELPHI nie jest problemem, w którym pracuję w 2007 roku i planuję utrzymać ją przez pewien czas w ekspansji. Teraz nie działa GetClass. – Jlouro

+0

Zrobiłem ci demo, zobacz ostatni link powyżej! Jeśli nie korzystasz z delphi XE, usuń plik DPROJ i otwórz plik .dpr, a powinien on nadal działać. –

+0

Dzięki za DEMO, ale brakuje "mainFormMainUnit1.pas". – Jlouro

4

Pakiety to proste rozwiązanie, ale mają jedną ogromną wadę. Korzystanie z pakietów wymusza na autorach wtyczek używanie nie tylko Delphi, ale także tej samej wersji kompilatora, co Ty.

Osobiście wolałbym ujawnić funkcjonalność aplikacji za pośrednictwem wielu interfejsów. Umożliwia to dostęp z języków innych niż Delphi.

Zazwyczaj wtyczka byłaby zaimplementowana w bibliotece DLL i wyeksportowałaby funkcję, którą aplikacja wywołałaby w interfejsie głównym reprezentującym aplikację. Wtyczka będzie następnie wywoływać metody tego interfejsu, ustanawiając dwukierunkową interakcję.

+1

Jeśli chce zwracać datamoduły i formularze Delphi, jak stwierdza to pytanie, ta porada nie jest przydatna. Ponieważ zwrócone formularze będą w każdym razie Delphi i zależne od wersji –

+0

Jednak dobrym pomysłem jest ostrzec ludzi przed wodami rekinami. Tak więc +1 dla Davida. –

Powiązane problemy