.[ ČeskéHry.cz ].
Jak tvorit plug-inovatelny program
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
uiii



Založen: 12. 08. 2007
Příspěvky: 251

PříspěvekZaslal: 22. listopad 2008, 10:34:48    Předmět: Jak tvorit plug-inovatelny program Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
(CZ)genius



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: Neratovice

PříspěvekZaslal: 22. listopad 2008, 10:45:53    Předmět: Odpovědět s citátem

DLL nebo scriptovat
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
uiii



Založen: 12. 08. 2007
Příspěvky: 251

PříspěvekZaslal: 22. listopad 2008, 10:48:03    Předmět: Odpovědět s citátem

(CZ)genius napsal:
DLL nebo scriptovat

Prosim, mohl bys trochu vysvetlit? nejsem v programovani zatim moc zbehly.
_________________
Twitter
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
(CZ)genius



Založen: 28. 07. 2007
Příspěvky: 85
Bydliště: Neratovice

PříspěvekZaslal: 22. listopad 2008, 10:53:50    Předmět: Odpovědět s citátem

budto DLL - dynamicky linkovane knihovny (normalni binarni "spustitelne" soubory majici vstupni body/funkce/interface ktere tvuj program zna a pouziva) ( http://en.wikipedia.org/wiki/Library_(computing)#Dynamic_linking , http://en.wikipedia.org/wiki/Dynamic-link_library )

nebo scripty - naimplementovat naky scriptovaci jazyk (Lua, Python, whatever..) - textove soubory ktere se pri spousteni zparsuji a provedou ( http://en.wikipedia.org/wiki/Scripting_language )

pripadne existuji i "knihovny pro podporu pluginu" a ty by to resily za tebe...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 22. listopad 2008, 11:34:54    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 23. listopad 2008, 04:24:34    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
uiii



Založen: 12. 08. 2007
Příspěvky: 251

PříspěvekZaslal: 23. listopad 2008, 11:13:24    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 23. listopad 2008, 11:34:13    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 23. listopad 2008, 11:36:50    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
uiii



Založen: 12. 08. 2007
Příspěvky: 251

PříspěvekZaslal: 23. listopad 2008, 11:49:55    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 23. listopad 2008, 12:01:27    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 23. listopad 2008, 13:15:48    Předmět: Odpovědět s citátem

uiii: to Qt je super vec, ale nespasi ta Smile 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) Smile 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
uiii



Založen: 12. 08. 2007
Příspěvky: 251

PříspěvekZaslal: 23. listopad 2008, 13:23:32    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
babca



Založen: 07. 04. 2008
Příspěvky: 5

PříspěvekZaslal: 25. listopad 2008, 13:46:40    Předmět: Odpovědět s citátem

Mohl bych vas jeste pozadat o nejake informace o scriptech? Jak vytvorit interprete atp.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 25. listopad 2008, 13:54:12    Předmět: Odpovědět s citátem

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 Wink
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna