Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ucitavanje i dupliranje ucitanih DLL-ova

[es] :: Pascal / Delphi / Kylix :: Ucitavanje i dupliranje ucitanih DLL-ova

Strane: 1 2

[ Pregleda: 5719 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.203.EUnet.yu.

Sajt: www.mediamonkey.com


Profil

icon Ucitavanje i dupliranje ucitanih DLL-ova14.12.2004. u 23:24 - pre 235 meseci
Lepo, ja izgubih mnogo sati pokusavajuci da nesto uradim i na kraju spadoh na dva pitanja:

1. Funkcija LoadLibrary i LoadLibraryEx ucitavaju DLL i vracaju Handle pozivajuci kernel32.dll funkciju. Pitanje da li neko zna sta se u stvari desava u toj funkciji tj. kojim redosledom ide inicijalizacija DLL-a?

2. Jeste da je povezano sa gornjim pitanjem ali kako da ucitam isti DLL dva puta ali tako da dobijem drugi Handle kao povratni u LoadlibraryEx, jer kada ponovo pozovem funkciju vrati mi se handle od prethodno ucitanog. To ima neke veze sa Thread-ovima jer sam win API dozvoljava ucitavanje samo jednog DLL-a po Applikaciji?

Napomena: ja sam stigao dotle da treba otvoriti novi thread za postojecu aplikaciju i tek onda pokusati ponovo ucitati DLL, medjutim nije mi uspevalo da to napravim.

unapred svima hvala.
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
213.244.208.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 00:55 - pre 235 meseci
kopiraj fajl n puta
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.neobee.net.

Sajt: www.mediamonkey.com


Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 02:53 - pre 235 meseci
Ja bih to da izbegnem, Ne bih da pazim sta sam i gde sam sta kopirao, a to malo i ogranicava gde smem da kopiram u slucaju da korisnik nema administratorski pristup

Saljem primer sa tvojim resenjem (bancika), mozda nekom padne ideja na pamet.
Prikačeni fajlovi
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
217.119.242.*



+62 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 09:41 - pre 235 meseci
Ako se nesto secam (davno je bilo), dll ima svoju internu listu thread-ova koji su ga ucitali. Tako da ako je thread1 vec ucitao sa LoadLibrary, ponovni pokusaj (iz istog thread-a) nece raditi. Moraces da pravis onoliko thread-ova koliko puta mislis da ucitas taj dll.

Rajko
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
213.244.208.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 12:23 - pre 235 meseci
a ja sam se salio
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.neobee.net.

Sajt: www.mediamonkey.com


Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 12:47 - pre 235 meseci
To sam i skontao i to vazi samo za Win32 DLL-ove u Win16 Svaki put kada pozoves DLL na ucitavanje on se ucita ponovo na novu adresu. Sta da kazem mane i kvaliteti Multitasking-a, Inace dok sam programirao na Atari-u i Mac-u toga nije bilo. Lepo mi kaze Help. Da Win32 Trazi dali je Dll vec ucitan za ovaj thread i ako jeste vraca DLLEntry Point od ucitanog. Za sada bancikino resenje je jedino na moju zalost.

Bancika: Sala ti je bila na mestu jer sam se ja ponasao kao LAMER, i u svakom slucaju sada mi je lakse jer mislim da nisam skroz glupav
 
Odgovor na temu

Miroslav Ćurčić
ex mVeliki
Novi Sad

Član broj: 19034
Poruke: 1118
*.dialup.neobee.net.



+19 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 14:42 - pre 235 meseci
Ajd jos jedan glup odgovor,
napravi jos jedan projekat (glavni) koji ce pozivati kao eksterni ovaj tvoj sadasnji projekat koliko god puta hoce, prosledjivajuci mu razlicite parametre za rad.
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
*.smin.sezampro.yu.

ICQ: 246436949


+10 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 16:01 - pre 235 meseci
Zasto je tako bitno da se svaki put ucita nova instanca dll-a?
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.46.EUnet.yu.



+1 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 17:11 - pre 235 meseci
Mislim da ste promasili poentu. Prednost DLL-a je stednja memorije jer jednom ucitan dll dele razliciti procesi (vi ste se uhvatili za niti, a proces je taj za sta se vezuje dll)

Pitanje je zasto bi ti trebalo da ucitavas odvojeno isti dll? Postoji mnogo razloga zasto ne bi trebao da koristis menjanje imena dll i slicne trikove, naravno osim ako bas nisi siguran sta radis. Nemoj posle da se zalis na fantomske probleme :)
 
Odgovor na temu

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.neobee.net.

Sajt: www.mediamonkey.com


Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 17:41 - pre 235 meseci
Morlic, Srki:

Neznam da li se neko bavio Winampom i njegovim pluginima ali struktura otprilike izgleda ovako racunajuci da je samo jedna pesma pustena u isto vreme:

1. Load Input plugin dll (Alocate mem address buffer for decoding File)
2. load output plugin Dll (Alocate Output Buffer)

Problem je kada pokusas paraleno da ucitas Dva fajla i da ih pustis u isto vreme a da ti ostane kontrola nad oba fajla (Osnova Crossfading-a) . Za sada svi Winampovi Crossfade plugin-i rade na principu Fill Buffer-a sto znaci da kada na kraju jedne pesme output buffer postane recimo 85% pun u preostalih 15% se ucitava dekodovan sledeci fajl. To radi, ali onog momenta kada pocne da se output buffer puni sa sledecim fajlom nemas nikakvu kontrolu nad vec dekodovanim fajlom. Pored toga ako je vec neki fajl poceo da puni buffer nema menjanja sem ako zelis da prekines pustanje fajla koji se zavrsasva.

Ala sam sada zakoplikovao

To je i osnovni razlog ucitavanja Input DLL-ova. Jer se dekodovanje mora vrsiti u razlicitim Bufferima zbog mogucnosti podesavanja parametara za svaki fajl posebno.
 
Odgovor na temu

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.neobee.net.

Sajt: www.mediamonkey.com


Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 17:46 - pre 235 meseci
mveliki,
Slazem se da tako ide, ali bih onda morao da podesavam parametre za svaki instance posebno sto opet pravi dodatno komplikaciju. Mada to vec nespada u ovaj Topic.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 17:56 - pre 235 meseci
Zasto u jednom dll-u ne napravis vise buffera? Nije mi bas sasvim jasno kako ne mozes da menjas ono sto ti je u buffer-u? Zar buffer nije prosto receno niz nekih promenljivih... ako si ti kreirao buffer mozes da ga menjas (od pocetka do karaja) kako god zelis sve dok ga ne posaljes WinAmpu i kada se zvuk cuje na zvucniku.
 
Odgovor na temu

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.neobee.net.

Sajt: www.mediamonkey.com


Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 18:09 - pre 235 meseci
Citat:
Srki_82: Zasto u jednom dll-u ne napravis vise buffera?
Nije mi bas sasvim jasno kako ne mozes da menjas ono sto ti je u buffer-u? Zar buffer nije prosto receno niz nekih promenljivih... ako si ti kreirao buffer mozes da ga menjas (od pocetka do karaja) kako god zelis sve dok ga ne posaljes WinAmpu i kada se zvuk cuje na zvucniku.


Problem i jeste u tome sto ja nemam nikakve veze sa DLL-ovima oni su licencirani na svoje programere i ja nemam veze sa tim. Sve bi bilo lako kada bih ja uspeo da ih sve napisem a i da pisem nove za nove formate.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova15.12.2004. u 18:28 - pre 235 meseci
Zar DSP efekti (kao sto je recimo Crossfade) nemaju svoj bafer? Ti primas podatke od IN pluginova i prosledjujes ih u OUT pluginove, zar ne? Zasto je problem da podatke koje primis od IN plugina promenis pre slanja u OUT u svom baferu koji si kreirao u svom DSP pluginu?
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
217.119.242.*



+62 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova16.12.2004. u 08:20 - pre 235 meseci
Peke, ima tu par stvari iz tvog izlaganja koje mi bas nisu jasne.
Buffer: ko kreira buffer, tvoja aplikacija (mainthread), neki worker thread, dll ili nesto trece? Gde se kreira: heap (dinamicka memorija) ili na stack-u? Kako se kreira, samo ucitas dll ili treba i da pozoves neku funkciju iz dll-a?

Scenario1: recimo da se buffer kreira pozivom neke funkcije iz dll-a, kao lokalna varijabla (znaci stack) u toj funkciji. Taj buffer je 'ziv' sve dok ne izadjes iz funkcije. U tom slucaju, resen problem, jer svaki thread u Win-u ima svoj stack, i jedan drugog ne ometaju.
Scenario2: buffer se kreira na heap-u, opet pozivom neke funkcije iz dll-a. Heap jeste zajednicki za celu aplikaciju (i njene thread-ove), ali posto je svaki thread alocirao svoj buffer pozivom pomenute funkcije, opet nema kolizije.
Scenario3: buffer se kreira SAMO JEDNOM, samim ucitavanjem dll-a, znaci za sve thread-ove jedinstveno. E, ovo je malo slozeniji slucaj. Resava se tako sto se napravi thread-safe klasa/omotac oko buffer-a, i ta klasa radi zastitu resursa (buffer-a), tako sto sprecava moguce kolizije thread-ova nad buffer-om. To su vec klasicne tehnike koriscenjem criticalsection-a, mutex-a ili sta vec.

Aj sad pojasni koji je stvarni scenario u tvom slucaju (osecam da nije ni jedan od gore navedenih :) ).

Rajko
 
Odgovor na temu

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.neobee.net.

Sajt: www.mediamonkey.com


Profil

icon Re: TimeSpam funkcija u Delphiju 717.12.2004. u 13:10 - pre 235 meseci
Citat:
Rapaic Rajko: Peke, ima tu par stvari iz tvog izlaganja koje mi bas nisu jasne.


Pojasnicu nadam se

Citat:
Rapaic Rajko:Buffer: ko kreira buffer, tvoja aplikacija (mainthread), neki worker thread, dll ili nesto trece? Gde se kreira: heap (dinamicka memorija) ili na stack-u? Kako se kreira, samo ucitas dll ili treba i da pozoves neku funkciju iz dll-a?


Buffer se kreira output plugin pozivajuci se na DirectShow i Directsound prilikom ucitavanja DLL-a. On moze biti interno menjan u DLL-u.

Citat:
Rapaic Rajko:Scenario1: recimo da se buffer kreira pozivom neke funkcije iz dll-a, kao lokalna varijabla (znaci stack) u toj funkciji. Taj buffer je 'ziv' sve dok ne izadjes iz funkcije. U tom slucaju, resen problem, jer svaki thread u Win-u ima svoj stack, i jedan drugog ne ometaju.


Jok. To nije to.

Citat:
Rapaic Rajko:Scenario2: buffer se kreira na heap-u, opet pozivom neke funkcije iz dll-a. Heap jeste zajednicki za celu aplikaciju (i njene thread-ove), ali posto je svaki thread alocirao svoj buffer pozivom pomenute funkcije, opet nema kolizije.


Moglo bi se reci. da output plugin kreira pozivanjem Init funkcije u DLL mada nisam 100% siguran jer nije isti sllucaj kod svakog DLL-a. To je ono sto me i nervira nemam source od plugina da mogu lepo da ih debagujem i vidim sta se desava.

Citat:
Rapaic Rajko:Scenario3: buffer se kreira SAMO JEDNOM, samim ucitavanjem dll-a, znaci za sve thread-ove jedinstveno. E, ovo je malo slozeniji slucaj. Resava se tako sto se napravi thread-safe klasa/omotac oko buffer-a, i ta klasa radi zastitu resursa (buffer-a), tako sto sprecava moguce kolizije thread-ova nad buffer-om. To su vec klasicne tehnike koriscenjem criticalsection-a, mutex-a ili sta vec.


I ovo bi mogao da bude scenario, ali isto kao u slucaju scenarija 2 nisam 100% siguran iliti kompetentan

Citat:
Rapaic Rajko:Aj sad pojasni koji je stvarni scenario u tvom slucaju (osecam da nije ni jedan od gore navedenih ).


Saljem primer programa koji mi je bio vodilja za jedan kanal. Cisto da se vidi sta u stvari treba da se desi
Nadam se da sam malo jasniji. a ako nisam ponovo na objasnjavanje.

U promeru imas IN_Wave (Za Wav), In_MP3(za MP3) i Out_Wave (za output na Windows Media Mapper) moze da se koristi i Out_DS iz winampa za DirectSound Output.

Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova17.12.2004. u 16:15 - pre 235 meseci
I dalje ne vidim kako ti ucitavanje dll-a 2 ili vise puta moze pomoci? Koliko znam u WinAmp-u se ucitava samo jedan IN, jedan DSP i jedan OUT plug in i zvus se cuje savrseno. Reci sta bi tacno zeleo da uradis? Npr: kada dodje do poslednjih 10 sekundi jednog fajla da taj fajl polako prelazi u sustanje dok se sledeci fajl polako cuje kroz kisu i posle odredjenog vremena se cuje samo cist drugi fajl. Ako je tako nesto u pitanju jedan DSP plugin to moze da uradi cak i ako nije dva puta ucitan.

P.S.
Pogledao sam tvoj programcic i mislim da malo bolje shvatam problem. Najbolje bi bilo da napises jedan In jedan Out i jedan Dsp plug in i da ispisujes u log fajl kako ih Winamp koristi pa da i u tvom programu mozes da ih koristis na isti nacin. Koliko sam video svi plug inovi kreiraju buffer-e na HEAP-u tako da ako ga ucitas dva puta postojace 2 razlicita buffer-a.
 
Odgovor na temu

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.neobee.net.

Sajt: www.mediamonkey.com


Profil

icon Re: TimeSpam funkcija u Delphiju 717.12.2004. u 18:44 - pre 235 meseci
Potpuno si u pravu sto se tice IN+OUT+DSP Winamp ucitava po jedan svaki jedino General plugini se ucitavaju na startovanju.

To i jeste zeznuto zato sto normalan korisnik i nevidi razliku, to je specificna stvar za DJ-eve (Citaj postace muzike sa racunara, tu racunam i sebe). Ali da pojednostavim krajnji efekat svega ovoga bi recimo moglo da bude upravo ono sto nas u principu sve nervira tj. u sred pustene pesme na radiu reklama a pesma se utisala. E, sad bih ja to da smestim u jedan program odnosno player. Jedno sam uspeo da dobijem sa programcicem
http://peke.narod.ru/plugins/gen_quickplays.zip koji radi taj posao u Mediamonkey-u http://www.Mediamonkey.com

E sad to se u winampu ne moze resiti nego se koriste razni programcici tipa
http://www.winamp.com/plugins/...p_Sincronization_and_Fader.exe

Nadam se da sam sada konacno definisao sta hocu da postignem.

RE: P.S. Da upravu si svaki In plugin ima svoj Buffer ali ne i OutPlugin sto je u stvari sustina problema. Iz winampovog plugin primera se vidi sta hocu da izbegnem.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Ucitavanje i dupliranje ucitanih DLL-ova17.12.2004. u 19:23 - pre 235 meseci
U winampu je itekako moguce postici efekat koji si spomenuo
Citat:
Ali da pojednostavim krajnji efekat svega ovoga bi recimo moglo da bude upravo ono sto nas u principu sve nervira tj. u sred pustene pesme na radiu reklama a pesma se utisala.

Pogledaj ovaj DSP plugin (mozda bas ne utisavaju ono sto trenutno svira, ali to je zato sto to nisu zeleli da naprave, a ne zato sto ne moze):
http://www.winamp.com/plugins/details.php?id=138782
Znaci sednes i napises svoj DSP plugin (na winamp-ovom sajtu imas SDK) i nemas problema ;)
 
Odgovor na temu

Peke
Ventis Media Inc.
Novi Sad

Član broj: 24103
Poruke: 66
*.neobee.net.

Sajt: www.mediamonkey.com


Profil

icon Re: TimeSpam funkcija u Delphiju 717.12.2004. u 22:15 - pre 235 meseci
Citat:
Srki_82: U winampu je itekako moguce postici efekat koji si spomenuo


Kako? Koja podesavanja imas i kako si ih namestio?

Citat:
Srki_82: Pogledaj ovaj DSP plugin (mozda bas ne utisavaju ono sto trenutno svira, ali to je zato sto to nisu zeleli da naprave, a ne zato sto ne moze):
Znaci sednes i napises svoj DSP plugin (na winamp-ovom sajtu imas SDK) i nemas problema


Za to netreba DSP to sam i napravio u mom Quick Play plugin-u, jedina razlika izmedju MP3 Remix-a i Quick Play Plugina je u tome sto on pusta Wav-ove Uz BPM (Zasta i sluzi DSP Plugin SDK) a Probaj Quick plugin sa Mediamonkey-em pa ces videti sta se desava isto. Oba pustaju u zasebnom Thread-u od winampovog i u svom playeru, MP3 Remix dekoduje pesmu i dodaje Stream-u kao efekat da bi Output plugin mogao da ga pusti.

Tako sam i ja napravio svoj player i samo ga ubacio u DLL po Winampovom SDK-au da radi kao General Plugin i to je to.

Problem nije u samom winampu vec u samom Windows Api-u koji nedozvoljava dve razlicite DLLEntryPoint adrese iz jednog thread-a.

Isto je reseno sa http://www.winamp.com/plugins/...12%2F17%2FP%2FFadeamp_v2.0.exe Dva winampa i Full CrossFade kao na DJ mikseti Dva odvojena ulaza, dva kontrolisana izlaza, dva playera i radi sta hoces.

Za winamp nema pomoci ali za MediaMonkey nadam se da ima jer je baziran na drugacijoj arhitekturi, mada je za korisnika (Player UI) uradjen po uzoru na Winamp, a i podrzava vecinu Winamp-ovih Plugin-a i Classic Skinova (Winamp v2.x).

Evo da jos pojednostavim i postavim kao hardware-ski problem: Jesi pokusao da ubacis dva CD-a u CD-Rom Istovremeno i da pustis sa svakog po jedan MP3 kao zasebne? Deluje nemoguce ali ako imas CD-Rom Changer ili Dva CD-roma je moguce je. Ovde WinAPI ne dozvoljava da to uradis isto to sa DLL-ovima tako da i dalje stoji pitanje kako moze?
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Ucitavanje i dupliranje ucitanih DLL-ova

Strane: 1 2

[ Pregleda: 5719 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.