Page 1 of 3 1 2 3 LastLast
Results 1 to 15 of 43

Thread: Geavanceerde Plugins

  1. #1

    Geavanceerde Plugins

    Hallo allen,

    ik wil vanuit een eigen component die al in een package is geplaatst graag gebruik maken van runtime plugin??s in andere packages. Deze plugins bevatten een lijst van objecten. Deze lijst van objecten moeten worden getoond in de applicatie die de component gebruikt.

    Wanneer de waarde van een object in de lijst wijzigd (binnen de plugin) moet hij een event doorgeven aan de component en die moet het vervolgens weer doorgeven aan de applicatie zodat deze de gewijzigde waarde op kan halen.

    Is dit mogelijk? Het gaat me voornamelijk om de vraag of het mogelijk is om events te versturen tussen meerdere packages?

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Tuurlijk, kwestie van royaal wat tnotifyevents rondstrooien.

    Het makkelijkste kan je de plugins laten erven van een abstracte tplugin class definitie in een niet dynamische gelaadde .bpl, en iederen plugin zich dan bij laden laten registreren.

  3. #3
    Kan de component in de niet dynamische package dan tijdens design time ook de dynamische plugin's benaderen? De dynamische plugins moeten namelijk (tijdens hun runtime) de objecten configureren.

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Tijdens designtime kan er niets dynamisch, maar misschien moet je het wat meer uitleggen

  5. #5
    Ik wil graag een IO component maken die ik design time kan configureren. Deze moet dan (designtime)gebruik maken van de verschillende plugins die ik wil maken. Elke plugin is specifiek voor een protocol. Bijv hardware io kaart of een type plc. De plugins bevatten een lijst van kanalen. Deze moet je kunnen configureren binnen elke specifieke plugin. De plugin geeft dan tijdens designtime van de io component de lijst met kanalen die er dan beschikbaar zijn. Runtime levert hij ook de waarde van het kanaal en een event wanneer de waarde wijzigd.

  6. #6
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Dat wordt zeer lastig, als het als het al kan.

    Je zou eens kunnen kijken of een designtime library een batterij plugins kan laden en queryen, maar dat zou wel eens opentools api expert werk kunnen zijn.

    (de designtime package registreert dan de componenten die na scannen van de plugin dir/registry vindt via de open tools api).

    Maar dat is eng, heel eng, en voorbij zelfs "gevorderde gebruiker". Het vereist een uitgebreide kennis van het package systeem en opentools api.

  7. #7
    Als ik in een designtime package een plugin probeer te laden gaat dat nog wel goed. Maar als ik in die plugin bijv. een ShowMessage wil laten zien tijdens het creeren krijg ik de volgende fout:

    ---------------------------
    Error
    ---------------------------
    Cannot load package 'PluginPackage.' It contains unit 'Dialogs,'which is also contained in package 'vcl100'
    ---------------------------
    OK Details <<
    ---------------------------

    Dus waarschijnlijk een conflict met de Delphi IDE omgeving en de packages die hij laad. Dit gaat al mis zodra ik de design component op het form probeer te plaatsen.

  8. #8
    Weet je zeker dat je PluginPackage wel vcl.dcp als required package heeft? De Dialogs mag niet nog apart in PluginPackage zitten.
    We adore chaos because we like to restore order - M.C. Escher

  9. #9
    Even met wat anders bezig geweest... Maar nadat ik de vcl.dcp als required package te hebben toegevoegd krijg ik geen foutmelding meer. Maar nu wordt de package wel geladen maar wordt de ShowMessage op de Create Method van de plugin niet meer getoond. Dus uiteindelijk wordt de package niet correct geladen.

    Ik vraag me af of het niet handiger is om de plugins te implementeren in een dll. De vraag is dan alleen of het wel mogelijk is om events te versturen vanuit de dll's. Weet iemand dit?

  10. #10
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Plugins in een DLL zou ik niet aan beginnen. Er is een reden voor packages.

    Het is technisch wel mogelijk, maar een stuk lastiger en meer lowlevel

  11. #11
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Even aansluitend hierop. Ik heb een heel klein beetje ervaring met packages en plugins.
    Maar is het niet zo dat een pluginsysteem met packages praktisch gezien onwerkbaar is?
    Wanneer mensen eigen plugins kunnen maken voor een app dat:
    a) de versies van delphi waarin app en plugins geschreven zijn exact hetzelfde moet zijn?
    b) de kleinste verandering in de interface van de app zijn basis bpl's alle reeds gemaakte packages onwerkbaar maakt?

    Is dat niet een reden juist DLL's te gebruiken?

  12. #12
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Het hangt van het doel van je plugin systeem af. In het bovenstaande geval ging het over in Delphi designtime plugins die per definitie dezelfde Delphi gebruiken en custom in een delphi ingecompileerd worden.

    Ook voor een typisch bedrijfs scenario aan, waar je een kern basis programma hebt, met klantspecifieke modules in plugins zou ik BPLs aanraden. Alles onder een beheer.

    BPLs zijn een subset van DLLs. Het is een framework bovenop DLLs gebouwd. Dus "DLLs" is geen plugin technologie, maar de basis technologie onder alle plugin systemen.

    Oftewel, hoe ga je een DLL gebaseerd plugin systeem inrichten zodat je het werkbaar houdt?

    BPLs of DLLs is dus iets als Delphi of assembler. Ja, in assembler kan je alles wat in Delphi kan, en assembler kan per definitie altijd sneller of gelijk aan Delphi, maar het moet wel ff allemaal met de hand gedaan worden.

    Het BPL systeem heeft een aantal voordelen:
    - het is zwaar compiler/IDE ondersteund en daardoor redelijk simpel en automatisch.
    - Het resultaat is in feite een groot programma (op compiler niveau), en je kan redelijk vrijelijk alle datatypes en door elkaar gebruiken (en dus ook classes en hele datasets enz van de een naar de andere doorgeven).

    Andere tradeoffs zijn mogelijk, maar zullen met de hand geïmplementeerd en beheerst moeten worden, en dus erg kostbaar in tijd. Alle aspecten die echter ondersteuning van de compiler nodig hebben vallen echter af, want die kent alleen BPL.


    Zie ook fpc wiki packages
    Last edited by marcov; 08-Nov-12 at 12:07.

  13. #13
    Senior Member
    Join Date
    May 2011
    Location
    Oisterwijk
    Posts
    468
    Quote Originally Posted by marcov View Post
    Tuurlijk, kwestie van royaal wat tnotifyevents rondstrooien.
    Ik zou liever een Observer en Observable object toepassen, voor de leesbaarheid en ook omdat je op die manier een X aantal (dus meerdere) objecten genotificeerd kan laten worden als Y veranderd.

  14. #14
    Senior Member
    Join Date
    May 2011
    Location
    Oisterwijk
    Posts
    468
    Quote Originally Posted by marcov View Post
    Oftewel, hoe ga je een DLL gebaseerd plugin systeem inrichten zodat je het werkbaar houdt?
    Dat staat toevallig op mijn todo list, en ik had gepland dat met (niet geregistreerde COM) interfaces te doen.

  15. #15
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Quote Originally Posted by Barry Staes View Post
    Ik zou liever een Observer en Observable object toepassen, voor de leesbaarheid en ook omdat je op die manier een X aantal (dus meerdere) objecten genotificeerd kan laten worden als Y veranderd.
    Goed, jij dan een fancy TNotifyEvent :-)

    Overigens gebruik ik typisch function-of-object methods met argumenten (en zelden echt tnotifyevent).

    Dat is tevens waarom ik zelden observer patterns gebruik.

Page 1 of 3 1 2 3 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •