KREIRANJE DLL u VB5 i pozivanje istih iz VB PROGRAMA

susese

Početnik
Poruka
15
Pre nego sto pocnem prozdravio bih sve programera forumase a naravno i ostale.
Posto sam u programiranju u VB5 dosta nov i neiskusan, trebala bi mi pomoc u vezi kreiranja DLL-va u VB5 a i pozivanje istih iz VB programa. Na internetu sam pokusao da nadjem primere ili neko uputstvo ali nisam uspeo, ima ih dosta ali za Delphi, C++, C# itd.
Kupio sam i VB6 BIBLIJU ali u njoj ni slova o ovoj temi.
Hvala na svakoj pomoci.
 
Pozdrav i tebi i da na samom pocetku rascistimo: ni VB5 ni VB6 ne kreira .dll-ove vec ActiveX dll-ove.
A kreira se tako sto odaberes kao projekat ActiveX dll.
Evo jedan primer:
Kod:
[COLOR="DarkGreen"]'Kod u ActiveX DLL-u
'Javne promenljive koje su vidljive za korisnika[/COLOR]
[COLOR="Navy"]Public[/COLOR] FirstName [COLOR="navy"]As String[/COLOR]
[COLOR="navy"]Public[/COLOR] LastName [COLOR="navy"]As String[/COLOR]
[COLOR="DarkGreen"]'
'Javne podrutine i funkcije su vidljive za korisnika[/COLOR]
[COLOR="navy"]Public Sub[/COLOR] EnterName()
[COLOR="DarkGreen"]'
'Privatne promenljive nisu vidljive van projekta[/COLOR]
[COLOR="navy"]Dim[/COLOR] str1st [COLOR="navy"]As String[/COLOR]
[COLOR="navy"]Dim[/COLOR] str2nd [COLOR="navy"]As String[/COLOR]
    [COLOR="DarkGreen"]'[/COLOR]    
    str1st = InputBox("Unesi tvoje ime.", "Dll Tester", , 3000, 2000)
    str2nd = InputBox("Unesi tvoje prezime.", "Dll Tester", , 3000, 2000)
    [COLOR="DarkGreen"]'[/COLOR]
    FirstName = ProperCaseName(str1st)
    LastName = ProperCaseName(str2nd)
    [COLOR="darkgreen"]'[/COLOR]
    MsgBox "Tvoje ime i prezime je " & FirstName & " " & LastName
    [COLOR="darkgreen"]'[/COLOR]
[COLOR="Navy"]End Sub[/COLOR]

[COLOR="darkgreen"]'Privatna Podrutine i Funkcije nisu vidljive za korisnika[/COLOR]
[COLOR="navy"]Private Function[/COLOR] ProperCaseName([COLOR="Navy"]ByVal[/COLOR] strName [COLOR="navy"]As String[/COLOR]) [COLOR="navy"]As String[/COLOR]
    [COLOR="darkgreen"]'[/COLOR]
    ProperCaseName = StrConv(strName, vbProperCase)
    [COLOR="darkgreen"]'[/COLOR]
[COLOR="navy"]End Function[/COLOR]

A ovako se poziva Funkcija "EnterName" i svojstva "FirstName" i "LastName" koje smo napisali u njemu:
Kod:
[COLOR="DarkGreen"]'[/COLOR]
[COLOR="darkgreen"]'Dimenzionisemo nasu promenljivu "x" kao objekat "clsName"[/COLOR]
[COLOR="Navy"]Dim[/COLOR] x [COLOR="navy"]As New[/COLOR] ProperCaseName.clsName

[COLOR="navy"]Private Sub[/COLOR] cmdExit_Click()
    [COLOR="darkgreen"]'[/COLOR]
    Unload Me
    [COLOR="darkgreen"]'[/COLOR]
[COLOR="navy"]End Sub[/COLOR]

[COLOR="navy"]Private Sub[/COLOR] cmdReRun_Click()
    [COLOR="darkgreen"]'[/COLOR]
    [COLOR="darkgreen"]'Ponovo pokrecemo Funkciju "EnterName" iz naseg ActiveX DLL-a[/COLOR]
    x.EnterName
    [COLOR="darkgreen"]'[/COLOR]
    Label1.Caption = x.FirstName
    Label2.Caption = x.LastName
    [COLOR="darkgreen"]'[/COLOR]
    [COLOR="darkgreen"]'Oslobadjamo memoriju[/COLOR]
    [COLOR="navy"]Set[/COLOR] x = [COLOR="navy"]Nothing[/COLOR]
    [COLOR="darkgreen"]'[/COLOR]
[COLOR="navy"]End Sub[/COLOR]

[COLOR="darkgreen"]'Ovde vidimo svojstva u objektu "x" koja smo kreirali u nasem ActiveX DLL-u[/COLOR]
[COLOR="navy"]Private Sub[/COLOR] Form_Load()
    [COLOR="darkgreen"]'[/COLOR]
    Form1.Show
    [COLOR="darkgreen"]'[/COLOR]
    [COLOR="darkgreen"]'Pozivamo Funkciju "EnterName" iz naseg ActiveX DLL-a[/COLOR]
    x.EnterName
    [COLOR="darkgreen"]'[/COLOR]
    [COLOR="darkgreen"]'Smestamo podatke u labele iz "FirstName" i "LastName" svojstva naseg ActiveX DLL-a[/COLOR]
    Label1.Caption = x.FirstName
    Label2.Caption = x.LastName
    [COLOR="darkgreen"]'[/COLOR]
    [COLOR="darkgreen"]'Oslobadjamo memoriju po zavrsetku[/COLOR]
    [COLOR="navy"]Set[/COLOR] x = [COLOR="navy"]Nothing[/COLOR]
    [COLOR="darkgreen"]'[/COLOR]
[COLOR="navy"]End Sub[/COLOR]



Ovde imas zakacen source
 

Prilozi

  • ProperCaseName.zip
    9,2 KB · Pregleda: 12
sist_ing HVALA neizmerno na pruzenoj pomoci, odnosno, na tako profesionalnom i detaljno odrzanom predavanju, koje je meni kao pocetniku u ovom meni prvenstveno hobiju a ne poslu neopisivo godilo i bilo tako prijemcivo i upecatljivo da sam prosto impresioniran i odusevljen. Sad su mi stvari oko DLL-a daleko jasnije i predpostavljam da ce mi to omoguciti da sada pisem odredjene programske rutine koje bi bile upotrebljive tj. pozivane iz drugih programa gde bi bile potrebne a istovremeno osnovni program koji razivjam ne bi bio vise tako glomazan.
Ostaje mi da jos mnogo toga saznajem i ucim a bice tesko jer sam u startu hendikepiran time sto ne znam engleski (jer u moje vreme se ucilo francuski i ruski), ali se nadam da cu nailaziti na ljude dobre volje koji ce mi pomagati ovako kako si mi Ti to danas pomogao. Jos jednom iskreno Hvala i pozdrav Tebi a i ostalim forumasima.
Do citanja.
 
Ok, samo nisam navik'o na tolike pohvale ali smatracu to kao tvoju naj iskreniju zahvalnos sto sam ti pomogao u "problemu" za koji si mozda mislio da ga neces skoro resiti.8-)

Ruku na srce, programiranjem se ne bavim profesionalno, pa i ne mogu da svoju pomoc zovem profesionalnom... to jednostavno ti tako dozivljavas... ima mnogo toga sto ni meni nije jasno. Ali kako god, drago mi je sto sam mogao da ti pomognem i stojim na raspolaganju kad god imam vremena za to.
Sa Engleskim, neznam sta da ti kazem... moraces da se malko pomucis uz pomoc nekog recnika. Ako te zaista programiranje interesuje, savladaces i Engleski polako.:wink:

P.S. Vidim da si se snasao oko referenci jer u suprotnom ne bi mogao da pozoves funkciju iz .dll-a a ja sam prevideo da ti to napisem. Samo napred.
 
Ponovo potrebna pomoc oko ActiveX.dll. U VB6 na XP sve radi kako treba. Ja radim u VB5 a OS mi je Win98SE. Kada kreiram ActiveX.dll i u programu hocu da dodam referencu preko komande Browse odredim putanju do foldera u kome se nalazi i dll, i lib, i class, ali se iz menija References fajl.dll ne vidi i ne mogu nikako da ga dodam na listu. Dali mi neko moze pomoci i reci mi u cemu je problem? Hvala i Pozz.
 
Evo do dana danasnjeg sam pokusavao da se snadjem sa ovim DLL-ovma ali ne ide. Jesam kompajlirao sam, ali mi javlja greske kao activeX nije mogao da creira objekt, ili no recuer...pa sam presao na plan B, tj. kreiram posebne exe fajlove koje bih pozivao iz glavnog programa, ali sam i tu naisao takodje na problem. Sa funcijom Shell, a i sa WinExec, pozivam u glavnom programu druge :"exe" programe ali se sada javalja problem kako da u taj pozvani program prosledim odredjene argumente, odnosno da iz tog pozvanog programa dobijem odredjene podatke, kako numerike tako i stringove. KAKO pitanje je sad?? Ako neko moze da pomogne, pomagajte, HVALA I POZZ.
 
Ne razumem. Jesi li ovako postupio pri setovanju objekta:

Kod:
[COLOR="Navy"]Dim[/COLOR] Prikaz [COLOR="#000080"]As[/COLOR] MojDll.MojaKlasa

[COLOR="#000080"]Private Sub[/COLOR] cmdStart_Click()
    [COLOR="DarkGreen"]'[/COLOR]
    [COLOR="#006400"]'Ovde setujemo objekat u nasu promenljivu "Prikaz".[/COLOR]
    [COLOR="#006400"]'i to je jedini nacin da prisupimo funkcijama, svojstvima, u nasoj biblioteci.[/COLOR]
    [COLOR="#000080"]Set[/COLOR] Prikaz = [COLOR="#000080"]New[/COLOR] MojDll.MojaKlasa
    [COLOR="#006400"]'[/COLOR]
    [COLOR="#006400"]'Ovde vidimo f'ju iz setovanog objekta[/COLOR]
    Prikaz.MojaFunkcija
    [COLOR="#006400"]'[/COLOR]
[COLOR="#000080"]End Sub[/COLOR]


E, da nebismo kojim slucajem zaboravili da setujemo objekat, to mozemo uraditi u
samom dimenzionisanju nase promenljive pa bi deklaracija isla ovako:

Kod:
[COLOR="#000080"]Dim[/COLOR] Prikaz [COLOR="#000080"]As New[/COLOR] MojDll.MojaKlasa

[COLOR="#000080"]Private Sub[/COLOR] cmdStart_Click()
    [COLOR="DarkGreen"]'[/COLOR]
    [COLOR="#006400"]'Ovde vise ne moramo setovati objekat kao u prethodnom prikazu vec mozemo[/COLOR]
    [COLOR="#006400"]'odmah pristupiti funkcijama u nasoj klasi[/COLOR]
    Prikaz.MojaFunkcija
    [COLOR="#006400"]'[/COLOR]
[COLOR="#000080"]End Sub[/COLOR]

Za tvoj plan B, tesko da mozes nesto uraditi na taj nacin. Donekle moze. Svojstva mogu da se prenose iz jednog u drugi .exe (tipa: ako je tamo tako podeseno, podesi ga i ovde tako) ako koriste zajednicku bazu. Medjutim, f'je, metode, eventi ovako ne mogu se prenositi da bi ih po tom koristio iz jednog u drugi .exe.:-(
Cemu bi onda sluzile dinamicki povezane biblioteke?

P.S. Nemam Win'98 i ne mogu da vidim u cemu je problem... ako bi objasnio detalje mozda bi bolje razumeli o cemu se radi pa bi se neko vec javio sa nekim resenjem ili savetom.

P.P.S. Mogao bi da ovde okacis source pa da vidimo u cemu je problem.:wink:
Pozdrav.
 
Jeste da je najbolje da ti neko objasni ali kako moze da ti objasni ako nema jasnu predstavu o tvom problemu? Zato postoji ova opcija da posaljes priloge.
Dakle, ispod polja za unos texta videces horizontalnu zutu traku sa natpisom "Dodatne opcije"
U tom polju nacices okvir "Prilozene datoteke".
U tom okviru imas dugme "Sredite priloge" klikni na njega.


Pojavljuje ti se ovaj prozor:

Ides na dugme "Choose" da bi pronasao .zip koji kacis
Kada si to uradio, kliknes na dugme "Slanje"
Kada se pojavljuje tvoj .zip u tom prozoru, znaci da je spreman i jednostavno zatvoris taj prozor i videces ga ispod polja gde pises poruke.
Dalje, klikni na dugme "Pregledajte poruku" da bi proverio da li si dobro okacio fail. Ako ga ima u tvojoj poruci, saljes fail a ako ga nema vracas se na onaj prozor "Sredi priloge" jer si definitivno nesto preskocio i pokusas opet.

Ovu opciju ja drugacije zovem: pomogni da ti pomognemo dakle, moras pojasniti problem ili resenje a najbolje se postize opcijom "Sredite priloge";-)
 
Mislio sam da mi neko objasni kako zakaciti prilog jer nigde nisam mogao naci uputstvo koje bi mi u tome pomoglo, sada nakon Tvoje pomoci mislim da cu uspeti da to odradim. Saljem kod koji je primer onoga sto mi ne uspeva da uradim, a hteo bih da mi dll bude biblioteka nekih funcija, koje bi pozivao iz svojih programa kad mi i gde mi zatrebaju. I dalje mi je potrebno znati kako prilikom poziva drugog vb.exe iz vb.exe proslediti neke numerik i string parametre. Sa Shell, i WinExec pozovem program ali ne mogu da uputim i primim neki parametar. CreateProces ne mogu da razaberem ako je to ta mogucnost onda mi treba pomoc oko njene upotrebe.Sist_ing hvala Ti na strpljenju, razumevanju, na detaljnim i slikovitim objasnjenjima.Hvala svima za svaku pomoc. Pozdrav svim forumasima.
 

Prilozi

  • Proba.zip
    17,8 KB · Pregleda: 6
Objasnio sam ti kako se kace failovi jer me je zivo interesovalo kako nece da setuje objekat... sad mi je jasno zasto nije htelo :-) ali nema veze.
Sledeci put obrati paznju kada kompailiras fail gde je jer si imao dva .dll-a i ti si uporno kreirao jedan a postavljao referncu na drugi:lol:

Kada sam odstranio jedan i povezao se na drugi, onda sam i mogao da vidim sta ne funkcionise u njemu pa sam ti i tamo pokazao koliko zu vazni argumenti u samoj f'ji i gde im je mesto jer na taj nacin imas potpunu kontrolu nad onime sta radis.

U ostalom, da se ne radujemo u napred, proveri pa vidi da li sad radi?... kod mene radi.
 

Prilozi

  • PROBA.zip
    12,4 KB · Pregleda: 6
E ovo sad radi, konacno, probao sam i sve je kako treba, ali mi je ostlo tajna ovih 6 linija koda koje sam morao da obrisem jer ih VB5 NIJE prihvatao odnosno nije hteo da ih kompajlira ali i bez njih sve je radilo kako treba.
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
End
 
Ne razumem. Ovo mi lici na proceduru svojstva u nekoj tvojoj klasi ili pak na svojstvo neke kontrole i sasvim je normalno sto VB nije mogao da to prevede bez jasnog ukazivanja kojoj klasi ili kojoj kontroli ova svojstva pripadaju.

Recimo, za VB bi bilo prihvatljivo ovako da pise:

nekakontrola.MultiUse = -1 'True
nekaklasa.Persistable = 0 'NotPersistable
mojaklasa.DataBindingBehavior = 0 'vbNone

Inace bi VB sve ovo prepoznao kao promenljive koje nisu deklarisane.
 
Ono sto sa sigurnoscu znam jeste da kada sam Ti poslao dll on je u zaglavlju izgledao ovako

Public datum As Variant
Public vbarkod As Variant
Public K As String
Public r As Byte

A kada sam u VB5 otvorio taj isti dll ali na kome si Ti verovatno radio sa VB6 izgledo je ovako

MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
End
Public datum As Variant
Public vbarkod As Variant
Public K As String
Public r As Byte
Notepad-om otvori fajl koji sam Ti poslao clsfunkc.cls i onaj koji Si mi poslao clsfunkc.cls i videces ovo sto Ti pisem.
Pokusao sam da ga kompajliram ali nikako nije uspevalo compajler je javaljao gresku i pozicionirao se na karakter -1 i javljao doslovce compile erorr: 'Invalid outside procedure.
Kada sam presao na XP i VB6 ,kada bih otvorio taj dll niti su se videli ti redovi coda a VB6 bi to kompajlirao bez problema, i sve je radilo kako je zamisljeno.
Sta je po sredi neznam, ali to su cinjenice, i ovo Ti pricam jer mi se ucinilo zanimljivim, no meni je vazno da sam uz Tvoju pomoc resio jedan problem i naucio nesto novo. Zahvaljujem Ti se i pozdravaljam Te, do sledeceg pitanja.
 
Da, sad sam video sta je po sredi.
Kada se kreira modul klase VB6 generise kod za osnovna podesavanja samog modula i on je nevidljiv u samom modulu, a koja VB5 logicki ne podrzava (tretira ga kao ostali deo koda koji ti pises i ne moze da ga izvrsi)... mislio sam da se radi o samom kodu zato mi je bilo cudno da tako nesto postoji. :smile:
 

Back
Top