[ vujkev @ 03.05.2004. 02:07 ] @
Kako napraviti spisak dll-ova koji imaju odredjenu proceduru u sebi? Malo konfuzno zvuci ali evo malog objasnjenja:
Pravim program koji bi trebao da bude prosiriv sa odredjenim funkcijama koje ce se nalaziti u exskternim dll falovima (dll-ove ja pravim u VB-u). Program bi trebalo da uzme listu svih dll-ova iz nekog dira (nije probelm), a zatim da pozove odgovarajucu proceduru u svakom nadjenom dll-u (tip subStart). U toj proceduri bi trebalo da stoji sta taj dll radi i kako da se pojavi ta funkcija u glavnom programu. Moj najveci problem (i za sad jedini) je kako definisati funkcije sa "Private/Public declare function ....." ako ne znam ni naziv dll-a ni broj koliko ce ih biti. Mogu li u kodu dinamicki da dodam nazive funkcija koje ce program pozivati i naravno kako.

Nadam se da je objasnjenje jasno, ako nije pokusacu da budem detaljniji.
[ mladenovicz @ 03.05.2004. 11:52 ] @
Koliko vidim, ti bi hteo da pozivas funkcije iz API DLLa (Private/Public declare function ...), a da DLL pravis u VBu. Mislim da u VBu mozes da pravis samo ActiveX DLLove, a oni se koriste tako sto kreiras objekat iz DLLa.

Ajde probaj da detaljnije objasnis sta hoces da napravis (cemu bi to sluzilo).
[ vujkev @ 03.05.2004. 18:32 ] @
Hteo bih da napravim jedan program koji ce skidati HTML stranicu sa net-a i sa nje izvlaciti neke podatke. Problem je sta ako se izvrsi redizajn te HTML strane ili samo njen path. Da ne bi menjao ceo program mislio sam da celu rutinu za obradu strane stavim u jedan DLL i po potrebi samo njega menjam, a onda ako vec pravim dll mislio sam da ubacim podrsku da kasnije taj isti program moze da skida stranice sa drugih server-a ukoliko se oni pojave. Znaci stavim u neki folder server1.dll, server2.dll .... i moj program pogleda sve DLL ove u tom folderu i izbaci sa kojih sajtova moze da skida strane i da ih obradjuje. Valjda sam bio malo jasniji.
[ vujkev @ 03.05.2004. 18:33 ] @
Citat:
mladenovicz:
Koliko vidim, ti bi hteo da pozivas funkcije iz API DLLa (Private/Public declare function ...), a da DLL pravis u VBu. Mislim da u VBu mozes da pravis samo ActiveX DLLove, a oni se koriste tako sto kreiras objekat iz DLLa.

Ajde probaj da detaljnije objasnis sta hoces da napravis (cemu bi to sluzilo).


Ok pogledao sam i u pravi si. Mogu da pravim samo ActiveX dll, ali opet je problem kako ih dinamicki ucitati
[ mladenovicz @ 04.05.2004. 11:03 ] @
Promena patha stranice ne bi trebalo da zahteva izmenu aplikacije. Napravi da objekat koji parsira stranu ima property URL, pa ga prosledjuj iz glavne aplikacije, ili ako moras da imas skup predefinisanih vrednosti cuvaj URLove u nekom settings fajlu (txt, ini, xml, ...).

Ovo kako si ti zamislio da radi mi izgleda prilicno "nestandardno". Posto su ActiveX DLLovi u pitanju, svaki od DLLova mora da bude registrovan (regsrv32) pre koriscenja. To nije problem, posto mozes da koristis Shell da bi registrovao sve DLLove iz nekog foldera. Druga stvar je kreiranje objekata. Objekat za parsiranje bi morao da deklarises As Object, pa da kreiras objekat (morao bi da znas kako se zovu klase unutar DLLa) sa CreateObject. Kako bi sve ovo radilo nemam pojma, probaj.

Ja bi to napravio ovako:
1) napravis interfejs koji parsira HTML stranu
2) napravis onoliko DLLova koliko ti treba, s tim sto svaki od objekata za parsiranje iz svakog DLLa implementira interfejs iz tacke 1. Pogledaj u MSDNu interface i Implements statement.
3) u glavnoj aplikaciji bi imao jedan Select Case koji bi zavisno od tipa HTML strane kreirao odgovarajuci objekat. Znaci kad napravis novi DLL, samo treba da dodas novi Case u tom selectu i to je jedina izmena koja je potrebna.

Code:

Private objParser As ParserInterface

    Select Case HTMLType
        Case 1
            Set objParser = New Parser1.Parser
        Case 2
            Set objParser = New Parser2.Parser
        Case 3
            Set objParser = New Parser3.Parser
        Case 4
            '......
    End Select
    
    Call objParser.Parsiraj
[ vujkev @ 04.05.2004. 12:29 ] @
Citat:
mladenovicz:
Promena patha stranice ne bi trebalo da zahteva izmenu aplikacije. Napravi da objekat koji parsira stranu ima property URL, pa ga prosledjuj iz glavne aplikacije, ili ako moras da imas skup predefinisanih vrednosti cuvaj URLove u nekom settings fajlu (txt, ini, xml, ...).

Ok to nije problem, ali sta ako dodje do redizajna stranice? To vec ne mogu da postavim negde u properties
Citat:

Ovo kako si ti zamislio da radi mi izgleda prilicno "nestandardno". Posto su ActiveX DLLovi u pitanju, svaki od DLLova mora da bude registrovan (regsrv32) pre koriscenja. To nije problem, posto mozes da koristis Shell da bi registrovao sve DLLove iz nekog foldera.

Ne moraju da se registruju ako se nalaze u istom folderu gde i EXE.
Citat:

Ja bi to napravio ovako:
1) napravis interfejs koji parsira HTML stranu
2) napravis onoliko DLLova koliko ti treba, s tim sto svaki od objekata za parsiranje iz svakog DLLa implementira interfejs iz tacke 1. Pogledaj u MSDNu interface i Implements statement.
3) u glavnoj aplikaciji bi imao jedan Select Case koji bi zavisno od tipa HTML strane kreirao odgovarajuci objekat. Znaci kad napravis novi DLL, samo treba da dodas novi Case u tom selectu i to je jedina izmena koja je potrebna.

E sad mi ovde nista nije jasno kao prvo svako DLL ce imati funkciju sa istim imenom i istim parametrima tako da pozivanje nece biti problem, ali kako da kazem programu da postoje. Za ono sto si ti napisao sa Select Case treba da znam koliko cu imati DLL-ova, a t o zelim da izbegnem
[ mladenovicz @ 04.05.2004. 13:24 ] @
Citat:
vujkev:
Ok to nije problem, ali sta ako dodje do redizajna stranice? To vec ne mogu da postavim negde u properties


Tip HTML strane (koji ce se parser koristiti) cuvaj u settingsu

Citat:
vujkev:
Ne moraju da se registruju ako se nalaze u istom folderu gde i EXE.


Ja koliko znam ActiveX komponente moraju da se registruju, bez obzira gde se nalaze. API DLLovi moraju biti u pathu.

Citat:
vujkev:
E sad mi ovde nista nije jasno :( kao prvo svako DLL ce imati funkciju sa istim imenom i istim parametrima tako da pozivanje nece biti problem, ali kako da kazem programu da postoje. Za ono sto si ti napisao sa Select Case treba da znam koliko cu imati DLL-ova, a t o zelim da izbegnem


Ovo resenje sa interfejsom zahteva minimalne izmene u kodu (dve nove linije za svaki novi parser). Ako neces da menjas kod glavne aplikacije probaj ovo sa CreateObject. Ne znam da li ce raditi, ali mi nista drugo ne pada na pamet.
[ icobh @ 10.05.2004. 12:19 ] @
Evo moje ideje za to:
1. prvo ovdje imas kako da izlistas sve fajlove u nekom folderu. http://www.elitesecurity.org/tema/28643
2. kad radis dll u vb u resource ubaci neki text fajl sa imenima funkcija u tom dll-u.
tako da kad prodjes kroz te dll-ove ocitas taj resource uz pomoc loadresdata mozes da znas gdje sta ima i tada mozes da pozoves f-ju koja ti treba jer znas u kojem se dll-u sta nalazi. razumijes.
3. zeljko je meni jedanput pisao neki dll koji nazalost nije radio ali sam ja nesto caprkao i uspio sam da strpam nekih 5-6 f-ja u njega. dll je radio sve ok a nisam ga bio registrovao a bio je u folderu kao i program.
[ mladenovicz @ 10.05.2004. 12:58 ] @
3) kad kompajliras DLL on je onda registrovan. Kad ga kopiras na neku drugu lokaciju da bi se koristio sa te lokacije mora da se registruje.