Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Dll

Sivun loppuun

tesmu [09.06.2005 19:40:27]

#

Eli ajattelin tehdä irc bottiini jonkinlaisen plugin systeemin dll kirjastoilla eli miten tämä olisi mahdollista ?

mikeful [09.06.2005 20:38:02]

#

Tein koulutyönä muistio-kloonin, jossa oli plugin-tuki, mutta en ole sen jälkeen jatkanut sitä. Jäin aluksi ohjelman kehittelyssä jumiin, mutta sitten löysin mahtavan artikkelin aiheesta ja homma meni loppujen lopuksi aika hyvin.

Osoite artikkeliin: http://www.devx.com/vb/Article/15767

Ainoa harmittava rajoitus on, että tämä käyttää ActiveX-dlliä jotka pitää rekisteröidä systeemin ennenkuin niitä voidaan ladata käyttöön.

Voin pistää ohjelmani nettiin, jos kiinnostusta löytyy.

Blaze [10.06.2005 01:42:48]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=vbdll
Tuossa on jonkinnäköinen johdatus aiheeseen.

juhaz [10.06.2005 08:40:43]

#

Tuo devx.com:n artikkeli ei toimi. Ei se valmis zipattu koodi eikä se sivullakaan oleva esimerkkikoodi vaan valittaa valittamistaan...

juhaz [10.06.2005 09:56:35]

#

Voisiko joku väsätä pienen esimerkkikoodin tuosta, että kuinka saadaan ajon aikana ladattua näitä "plugineja". Voisi olla käyttöä monessakin projektissani :D


EDIT: Mikeful, joo laita vaan nettiin... sourcien kanssa siis tietenkin... Jos ymmärtäisi jotain...

Blaze [10.06.2005 14:11:10]

#

Muistelinki, että mulla oli tommonen jo jossain valmiina: http://pp.kpnet.fi/blaze/temp/dlllatauslennosta.zip

mikeful [10.06.2005 15:38:59]

#

Tässäpä tämä on: http://www.freewebs.com/mikeful/lataus/perus_muistio.zip

tesmu [10.06.2005 17:17:35]

#

Joo kiitoksia paljon eiköhän näillä eväillä mennä eteenpäin

juhaz [10.06.2005 18:22:38]

#

Kiitoksia! Nyt sain minäkin nämä toimimaan... sit, kun vain keksi jotain käyttöä xD

EDIT: Pystyikö DLL:stä vaikuttamaan mitenkään ohjelman sisältöön? Esimerkiksi jos ohjelmassa ei tiedetä etsiä dll:stä jotain tiettyä tekstiä muuttujasta, mutta dll:ssä käskettäisiin tyyliin

form1.text1.text = "MOI!"

niin form1:n text1.text olisi "MOI!". Itse en ainakaan saanut toimimaan juuri tuolla tavalla. En muista mitä valitti, mutta jotain tyyliin, että form1:stä ei löydy tjs..?

Blaze [10.06.2005 18:58:36]

#

Ei onnistu noin, mutta voit luoda sille DLL:ssä olevalle luokalle eventin ja laitat sen emo-ohjelman vaihtamaan tuon tekstin tuon eventin tapahtuessa.

tesmu [10.06.2005 20:13:39]

#

Tjooh no mää tein ihan testiksi dll kirjaston jossa oli functio

Public Function messagepoksi()
Msgbox "Täs"
End Function

käänsin dllksi c asemalle nimellä moi.dll
sitten koitin ladata sitä tällätavalla

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Sub Form_Load()
    On Error Resume Next
    Dim lb As Long, pa As Long
    lb = LoadLibrary("C:\moi.dll")
    pa = GetProcAddress(lb, "messagepoksi")
    CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0&
    FreeLibrary lb
End Sub

mutta eipä workkinu

Blaze [10.06.2005 21:05:53]

#

Tuo tapa toimis perinteisille DLL:lle, VB kuitenkin tekee vain ActiveX-DLL:ä, joita käytetään huikan toisella tavalla. Ks. tuo mun esimerkkiprojekti muutama viesti ylempänä.

tesmu [11.06.2005 18:04:08]

#

Niin mut siis tuo kutsuu sun projektin sisäisi dll kirjastoja mutta kun pitäisi saada sellanen että kuka vaan voi tehä dll ja minkälaisen vaan ja sitten se liitetään pluginina koitin tehdä oman dll ja pistää tuon ohjelman lataamaan sitä ja kutsumaan functiota sieltä mutta valitti vaan ettei sellasta objectia ole

petrinm [12.06.2005 10:58:35]

#

Pari kysymystä:
-Menin ihan sekaisin, siis mikä nyt oli ton Plug-In:in tarkoitus ja toimita periaate?
-Miksi toi PerusMuistio ohjelma ei näytä dll tiedostoja lisäosat kohdassa jos dll tiedostoja on hakemistossa vain yksi?

Blaze [12.06.2005 13:27:30]

#

petrinm kirjoitti:

-Miksi toi PerusMuistio ohjelma ei näytä dll tiedostoja lisäosat kohdassa jos dll tiedostoja on hakemistossa vain yksi?

Ai, tuokaan ei ollut winen vika :)
Pitääpäs kokeilla tuota vielä uusiksi.

juhaz [12.06.2005 14:17:07]

#

Itse päädyin muokkaamaan tuota koodia sen verran, että se hakee siihen listaan ne pluginit tekstitiedostosta.

tesmu [12.06.2005 21:49:18]

#

Mun firefoxi ei ainakaan suostu lataamaan tuota perus muistiota kun klikkaan linkkiä niin se ohjaa tälle sivulle takaisin eikä toiminut sellattiinkaan että laitoin urlin osoteriville =/

mikeful [12.06.2005 22:41:32]

#

PerusMuistio käyttää plug-ineihin ActiveX-DLLiä, jotka pitää reksiteröidä järjestelmään ennen käyttöä. VB 6.0 osaa itse reksiteröidä DLLn käännöksen yhteydessä, muuten sen joutuu tekemään käsin jollain ohjelmalla, jonka nimeä en muista. Se kuitenkin tulee Windozen mukana.

Ohjelma ei siis listaa lisäosaa, koska sitä ei ole rekisteröity järjestelmään.

petrinm, plug-init ovat ohejelmiin tehtäviä lisäosia, joille voidaan laittaa tehtäväksi oikeastaan mitä tahansa. Avain toimivaan plug-in järjestelmään on hyvin suunniteltu rajapinta ohjelman ja lisäosien välillä.

tesmu, yritä mennä lataamaan pääsivun kautta.

Juice [12.06.2005 22:50:45]

#

Muistaakseni Spybot jai joku semmonen teki Imunize-toiminnossan sen, että klikatessa freewebsiin menevää linkkiä siirtymistä ei tapahdu, vaan osoite pitää kopioida osoiteriville.

tesmu [13.06.2005 12:48:58]

#

Mulla tuli tällänen erroori

---------------------------
PerusMuistio
---------------------------
Run-time error '429':

ActiveX component can't create object
---------------------------
OK
---------------------------
mikähän mahtaa olla vikana

Edit:
Sain toimimaan
unohdin rekisteröidä sen systeemiin ^^

tesmu [13.06.2005 14:04:25]

#

Joo elikkäs tuli vastaan toinen ongelma

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Public Function Kirjota(Avain As String, Määrite1 As String, Määrite2 As String, Tiedosto As String)
On Error Resume Next
Dim x As Long
x = WritePrivateProfileString(Avain, Määrite1, Määrite2, Tiedosto)
End Function


Public Function PluginName(Nam As String) As Object
  Dim strCreateString As String
    Dim vObj As Object
    strCreateString = MakeObjectFromPath(Nam)
    Set vObj = CreateObject(strCreateString)

    Set PluginName = vObj
End Function

Public Function HaeTiedot(Path As String)
Dim onko As String
Shell "c:\windows\system32\regsvr32 " & Path, vbHide
Wait 5
Dim tyyppi As String
Dim nimi As String
Dim tekijä As String
Dim versio As String
Dim tulos As Variant
Dim vObj As Object
Set vObj = PluginName(Path)
tyyppi = vObj.Tyyp
nimi = vObj.nimi
tekijä = vObj.tekija
versio = vObj.versio
Kirjota "Tiedot", "tyyppi", tyyppi, App.Path & "\" & Path & ".ini"
Kirjota "Tiedot", "nimi", nimi, App.Path & "\" & Path & ".ini"
Kirjota "Tiedot", "tekijä", tekijä, App.Path & "\" & Path & ".ini"
Kirjota "Tiedot", "versio", versio, App.Path & "\" & Path & ".ini"
Kirjota "Tiedot", "onko", "1", App.Path & "\" & Path & ".ini"
Set vObj = Nothing
End Function

eli mulla on tolasta koodia siinä tuo kirjota functio kirjottaa ini tiedostoon asetukset u know mut
vb valittaa tästä rivistä

Set vObj = CreateObject(strCreateString)

valittaa että activeX ei voi luoda

mikeful [13.06.2005 17:44:11]

#

Katsastappa edellinen viesti.

tesmu [13.06.2005 19:03:38]

#

Latasin pää sivun kautta
olen rekisteröinyt dlln
Mutta silti valittaa
ja kuten huomaat tuossa koodissa se rekisteröi sen jo

Shell "c:\windows\system32\regsvr32 " & Path, vbHide

mikeful [14.06.2005 14:12:59]

#

Ei sitä DLLää joka kerta tarvi rekisteröidä.

tesmu [14.06.2005 18:53:20]

#

tuo haetiedot functio käydään läpi jos ini tiedostosta ei löydy pluginin tietoja

juhaz [17.06.2005 05:38:14]

#

Blaze kirjoitti:

Ei onnistu noin, mutta voit luoda sille DLL:ssä olevalle luokalle eventin ja laitat sen emo-ohjelman vaihtamaan tuon tekstin tuon eventin tapahtuessa.

Aika noobie kysymys, mutta kuinkas se tapahtuukaan? :D

Blaze [17.06.2005 13:00:24]

#

Ohjelma:

Dim WithEvents Muuli As MunLuokka

Private Sub Muuli_HassuEventti()
  'Tämä tapahtuu kun Muulissa tapahtuu HassuEventti
End Sub

MunLuokka:

Public Event HassuEventti()

Private Sub JokuSubi
  If JokuEhto Then RaiseEvent HassuEventti
End Sub

Sivun alkuun

Vastaus

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

Tietoa sivustosta