Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: DLL-funktiot

Sivun loppuun

kayttaja-4976 [22.04.2006 17:00:40]

#

Miten voin kutsua jotain funktiota DLL:stä? Olen lukenut Putkan DLL-oppaan mutta koko ajan tulee Run-Time Error '53': File not found. Itse funktion koodi ei aiheuta virhettä.

neau33 [24.04.2006 08:04:21]

#

Moikka kayttaja-4976!

Esim. XP:ssä
Kopioi se sun.dll c:\windows\system32 hakemistoon ... Käynnistä - Suorita - kirjoita: regsvr32 c:\windows\system32\sun.dll - OK
Tarkistus:
Käynnistä - Suorita - kirjoita: regedit - OK - Muokkaa - Etsi - kirjoita: sun.dll - Etsi seeuraava.
Jos jossain lukee c:\windows\system32\sun.dll niin homman pitäs pelata

EDIt: Nappaa vielä siinä vasemmassa lootassa sen InprocServer32 alla
olevaa avainta ProgID - siellä pitäis näkyä sun.dll'n sisältö...

kayttaja-4976 [26.04.2006 21:04:07]

#

Se DLL siis rekisteröidään wintoosaan ja katotaan regeditistä ProgID:llä mitä se sisältää...?
Taisin muotoilla kysymykseni aika pahasti väärin :( .
Siis:

Tein DLL:n.
Siinä on Public Function Munfunktio(parametri As Integer)
Kokeilin kutsua DLL:ssä olevaa funktiota omasta muusta projektista, mutta mitään ei tapahdu.

~Silti jos ymmärsit mitä tarkoitin ja yrität saada viestin perille niin voisitko selventää? ~ Kiitos.

setä [26.04.2006 23:17:23]

#

Olethan lisännyt DLL:stä referenssin omaan muuhun projektiisi ?

neau33 [27.04.2006 15:02:45]

#

Moikka kayttaja-4976!

Jos nyt olen ymmärtänyt oikein, niin olet aikeissa kutsua Dll:stäsi jotain... eli ekaks esitely moduulissa:

Public Declare Function SeJaSe Lib "sun.dll" (param As Tyyppi, etrit As Tyypi) As Tyyppi

... jolloin voit kutsua sitä lähes mistä tahansa Projektissasi. Voidaksesi tehdä tämän sulavasti olisi hyvä että dll:si sijaitsisi käyttiksesi system-hakemistossa ja että dll:si olisi rekisterissä jolloin se näkyy referensseissä automaattisesti ilma eri noutamista...Jos taas olin ymmärtänyt ideasi väärin, niin siinä tapauksessa unohda tämä kokonaan...

kayttaja-4976 [27.04.2006 17:47:44]

#

Setä: Kyllä se on referensseissä.

Neau33:
Pitääkö sinne DLL:ään lisätä jotain koodeja taikka rekisteröidä sitä jollain jännällä tavalla? Nyt se sanoo "Run-Time error '453': Can't find DLL entry point Munfunktio in MunDLL.dll".

Kokeilin kopioida DLL:n samaan hakemistoon projektini kanssa ja kirjoittaa projektin moduuliin tuon Public Declare Function-lauseen, mutta erroria pukkaa.

Blaze [27.04.2006 18:46:42]

#

VB:llä ei voi tehdä "perinteisiä" DLL:ä, vain ActiveX DLL:ä. Tästä seuraa se, että sinne DLL:n pitää (as in on pakko) tehdä luokka, jonka metodeiksi sitten kapsuloidaan nuo funktiot (tai mieluummin, noudatetaan hyviä olio-ohjelmointiperiaatteita :)

Declare-lausetta ei tarvita ActiveX-DLL:n kanssa, referenssin lisääminen (jota ennen DLL pitää olla rekisteröity, tai samassa projektiryhmässä) riittää.

neau33 [27.04.2006 19:22:20]

#

Heippa Blaze!

Olet täysin oikeassa koskien ActiveX-DLL rekisteröintiä.

Mut jos kiinostaa niin...confaamaan

kayttaja-4976 [28.04.2006 12:46:58]

#

Eli siis voin unohtaa kivat funktiot DLL:ssä?

kayttaja-4976 [29.04.2006 10:28:43]

#

Pitääkö DLL:n olla System32-kansiossa jotta sitä voi kutsua näin?

Public Declare Function SeJaSe Lib "sun.dll" (param As Tyyppi, etrit As Tyypi) As Tyyppi

Blaze [29.04.2006 13:19:01]

#

kayttaja-4976 kirjoitti:

Eli siis voin unohtaa kivat funktiot DLL:ssä?

Ei, joudut vaan muuttaan ajattelutapaas olio-ohjelmoinnin mukaseks.

kayttaja-4976 kirjoitti:

Pitääkö DLL:n olla System32-kansiossa jotta sitä voi kutsua näin?

Ei välttämättä, mikä tahansa PATH-ympäristömuuttujassa oleva polku tai ohjelman oma hakemisto kelpaa.

Ja edelleenkin: VB:llä tehty (ts. ActiveX-DLL) ei kelpaa.

kayttaja-4976 [29.04.2006 15:30:54]

#

Joo okei. No millä kääntäjällä sitten ehkä jopa voisi tehdä kelpaavia DLL:iä?

Metabolix [29.04.2006 17:34:31]

#

Jollakin muulla kuin VB:llä ainakin aivan helposti.

Onko aivan ylivoimaista tehdä se yksi wrapperiluokka funktioille? Ei tarvitsisi muilla kielillä ja/tai kääntäjillä leikkiä.

kayttaja-4976 [30.04.2006 21:29:15]

#

Niin kai se on.

kayttaja-4976 [23.05.2006 20:43:51]

#

Sain palautusarvot toimimaan kun tein DLL:ään 2 Boolean-muuttujaa, Processing ja Palauta. Laitoin Processing-muuttujan Trueksi kun DLL tekee töitä ja palautusarvoksi Palauta. Luin muuttujat muusta projektista Munluokka.Processing-tyyliin jne.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta