Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 22. listopad 2008, 10:34:48 Předmět: Jak tvorit plug-inovatelny program |
|
|
Cau, chlet bych se zaptat, jestli nevite kde bych se moh docist, nebo nejak jinak dozvedet, jak vytvaret program tak, aby podporoval plug-iny. Ja totiz vubec nevim technicky jak to implementovat. A kdyz se do neceho budu poustet, tak bych to teda rad stavel uz od zacatku pro podporu pluginu. Dik Uiii _________________ Twitter |
|
Návrat nahoru |
|
|
(CZ)genius
Založen: 28. 07. 2007 Příspěvky: 85 Bydliště: Neratovice
|
Zaslal: 22. listopad 2008, 10:45:53 Předmět: |
|
|
DLL nebo scriptovat |
|
Návrat nahoru |
|
|
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 22. listopad 2008, 10:48:03 Předmět: |
|
|
(CZ)genius napsal: |
DLL nebo scriptovat |
Prosim, mohl bys trochu vysvetlit? nejsem v programovani zatim moc zbehly. _________________ Twitter |
|
Návrat nahoru |
|
|
(CZ)genius
Založen: 28. 07. 2007 Příspěvky: 85 Bydliště: Neratovice
|
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 22. listopad 2008, 11:34:54 Předmět: |
|
|
doporucuju se podivat do zdrojaku nejakyho OSS programu ktery podporuje pluginy - inspirace je vic nez dost
v .NETu napr. k tomuto vyborne poslouzi reflection |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 23. listopad 2008, 04:24:34 Předmět: |
|
|
V C++ to řeším poměrně jednoduše přes dynamické linkování knihoven. DLL obsahuje funkci CreateInstance, která vytvoří třídu implementující rozhraní "seznam pluginů". Tato třída umožňuje:
- enumerovat všechny pluginy v DLL
- automaticky vytvořit a přidat všechny pluginy do jádra projektu (pokud má k němu přístup)
- k vybranému pluginu vrátí alokátor, který pak umožňuje vytvořit libovolný počet instancí toho pluginu, typicky se jedná o třídy implementující nějaké rozhraní jádra
V jádře pak nemám přímo instance pluginů, ale seznamy alokátorů ve skupinách jako např. image loadery, mesh loadery, různé implementace 3D API, implementace různých jazyků na shadery apod. Každého alokátoru pluginu se mohu textovým popisem zeptat, co umí a on odpoví buď ano nebo ne.
Např.:
- mám název souboru s příponou JPG. Dám tedy všem alokátorům image loaderů dotaz "load:jpg", vyberu první instanci toho, kdo odpoví ano, a načtu s ním obrázek.
- implementaci 3D API můžu vybrat podobně. Buď můžu zadat dotaz "OpenGL", pak mi kladně odpoví pouze OpenGL renderer. Nebo můžu zadat dotaz "Detect", potom mi kladně odpoví všechny a já použiju ten, který se umí v pořádku inicializovat tzn. který je podporovaný hardwarem. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 23. listopad 2008, 11:13:24 Předmět: |
|
|
Dik vsem za rady, jeste bych se zeptal jestli to s tema DLL knihovnama je mozny pouzit i v linuxu? Myslim ze v linuxu se pouzivaj jiny knihovny, nebo aspon maj jinou priponu. _________________ Twitter |
|
Návrat nahoru |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 23. listopad 2008, 11:34:13 Předmět: |
|
|
Dynamicky linkovane knihovny v Linuxu funguji uplne stejne, jenom maji typicky priponu .so (shared object) a mas jich plny /lib a /usr/lib. Funkce pro praci s nimi se taky jmenuji trochu jinak (dlopen, dlsym, nebo nejak tak), ale princip a pouziti je uplne stejne.
Jinak samozrejme ani na windows ani na linuxu te nic nenuti, aby ty soubory mely priponu dll/so, klidne je muzes pojmenovat treba .plugin. _________________ http://trionteam.net |
|
Návrat nahoru |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 23. listopad 2008, 11:36:50 Předmět: |
|
|
A pokud otazka byla, jestli muzes prenaset zkompilovany .dll soubor mezi windows a linuxem, tak kratka odpoved zni ne. Dlouha zni ne bez znacneho a zbytecneho usili. _________________ http://trionteam.net |
|
Návrat nahoru |
|
|
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 23. listopad 2008, 11:49:55 Předmět: |
|
|
OndraSej napsal: |
... jestli muzes prenaset zkompilovany .dll soubor mezi windows a linuxem, tak kratka odpoved zni ne. ... |
To teda znamená, že pokud bych chtěl mít ten software pro oba systémy (psal bych to v c++, Qt), tak by měl kazdý trochu jiný kód kvůli natažení pluginů a i samotný pluginy by museli bejt dvojí verze - pro Linux a pro Windows? _________________ Twitter |
|
Návrat nahoru |
|
|
OndraSej
Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 23. listopad 2008, 12:01:27 Předmět: |
|
|
uiii> Dvoji budes potrebovat uz samotnou binarku toho programu. Stejne tak ty knihovny musis prelozit pro kazdy system zvlast. Na nacitani mozna ma nejaky wrapper Qt (nevim, nikdy jsem s nim nedelal). Kod tech pluginu budes samozrejme psat multiplatforme.
Jinak ano, musel bys to nejak zaobalit - na druhou stranu jde o nejake tri funkce (nacteni knihovny, zjisteni adresy funkce v knihovne, zavreni knihovny - presne tyhle same funkce jsou na windows, jen se jmenuji jinak a maji trochu jine parametry), takze kdyz budes psat nejaky kod pro nacitani tech pluginu, tak by pro tebe nemel byt problem tohle vyresit na par mistech ifdefem. _________________ http://trionteam.net |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 23. listopad 2008, 13:15:48 Předmět: |
|
|
uiii: to Qt je super vec, ale nespasi ta Ked chces ten isty program mat na roznych platformach, musis ho na kazdej skompilovat. S tym nespravis nic. To iste plati aj o pluginoch (teda dynamickych knizniciach), hoci "v Qt". Ono su to tiez len programy a preto ich musis skompilovat na kazdej platforme zvlast. Dufam, ze to vies :]
Vyhoda toho Qt je v tom, ze v tom kode nebudes musiet nic menit.
V Qt si pozri help ku QLibrary - je to presne to, co chces - nacita ti dynamicky aj .so aj .dll a dokonca je to take 'inteligentne', ze podla toho, na ktorej platforme to spustis, tak si same doplni koncovku (ak mu samozrejme nenarves absolutnu cestu) Ale sam som s tym nerobil. Kazdopadne, tvari sa to nice.
glUck() _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 23. listopad 2008, 13:23:32 Předmět: |
|
|
To ze to musim pro kazdej OS zvlast zkompilovat to je naprosto jasny, ale slo mi o to ze na kazdou platformu bych mel mit i jinej kod, ale jak pise pcmaster tak s tim Qt by to teda melo bejt v poho a kdyz bych to neresil pres Qt tak bych pouzil ifdef _________________ Twitter |
|
Návrat nahoru |
|
|
babca
Založen: 07. 04. 2008 Příspěvky: 5
|
Zaslal: 25. listopad 2008, 13:46:40 Předmět: |
|
|
Mohl bych vas jeste pozadat o nejake informace o scriptech? Jak vytvorit interprete atp. |
|
Návrat nahoru |
|
|
Quiark
Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 25. listopad 2008, 13:54:12 Předmět: |
|
|
Zapiš si předměty Automaty a Gramatiky, Překladače na vysoké škole.
Anebo použij existující skriptovací jazyky jako Lua nebo Python _________________ Mám strach |
|
Návrat nahoru |
|
|
|