cbLib - Paremmat DLL-komennot CoolBasiciin

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
Cérebro
Newcomer
Posts: 35
Joined: Wed Jul 16, 2008 8:56 pm

cbLib - Paremmat DLL-komennot CoolBasiciin

Post by Cérebro » Sat Nov 22, 2008 4:43 pm

Kovan puurtamisen jälkeen olen saanut rakennettua uuden DLL-systeemin CoolBasiciin.
cbLib:n avulla voit kutsua DLL:iä yksinkertaisesti ilman muistipaloja.

Funktiot:

Code: Select all

DLL = cbLib_LoadLib(Tiedoston polku) - Lataa DLL:n muistiin
Funktio = cbLib_GetFunc(DLL, Funktion nimi) - Hakee funktion DLL:stä

cbLib_CallFunc(Funktio, Parametrit) - Kutsuu funktiota, palauttaa kokonaisluvun
cbLib_CallFunc#(Funktio, Parametrit) - Kutsuu funktiota, palauttaa desimaaliluvun
cbLib_CallFunc$(Funktio, Parametrit) - Kutsuu funktiota, palauttaa merkkijonon

cbLib_FreeLib(DLL) - Vapauttaa DLL:n muistista
Esimerkki (paketissa mukana):

Code: Select all

Include "cbLib.cb" // Sisällytetään cbLib koodiin

Lib = cbLib_LoadLib("C:\WINDOWS\System32\User32.dll") // Ladataan DLL muistiin
Func = cbLib_GetFunc(Lib, "MessageBoxA") // Haetaan funktio DLL:stä
cbLib_CallFunc(Func, 0, "$Tekstiä", "$Otsikko", 0) // Kutsutaan funktiota
cbLib_FreeLib(Lib) // Vapautetaan DLL muistista
Päivitys:
Käyttää cbDLL:ää.
cbLib_GetFunc:lle annetaan parametrien määrä.
cbLib_CallFunc:lle annetaan parametrit.
Jos parametri on tekstiä, sen edessä täytyy olla $-merkki (esim. "$Tekstiä" huom. muuttuja: "$" + var).
Varoitus: Jos tutkit cbLib_CallFunc:n sisältöä, parametrien säätö on puhdasta purkkaa.

Päivitys 2:
Huomasin etteivät cbLib_CallFunc# ja cbLib_CallFunc$-funktiot toimineet (niitä ei oltu määritelty DLL:ssä DLLEXPORT:lla) -> Korjattu.
cbLib_GetFunc:lle ei anneta parametrien määrää, ne ovat dynaamiset.
Edellisestä päivityksestä oli unohtunut WChar-tuki -> Jos tekstin pitää on WChar-muodossa, sen edessä täytyy olla @-merkki.
Nyt mukana tulee myös User32-include ja sille oma esimerkki.

Latauslinkki:
http://koti.mbnet.fi/cerebro/cbLib.zip
Last edited by Cérebro on Fri Dec 05, 2008 7:33 pm, edited 6 times in total.
cbLib | XMap
In development: EasyBasic - Basic-tyylinen peliohjelmointikieli

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbLib - Paremmat DLL-komennot CoolBasiciin

Post by Aavesoturi » Sat Nov 22, 2008 6:33 pm

Nähtävästi tällä onnistuu sangen helposti DLL:ien kutsuminen, joita ei ole erikseen suunniteltu cb:lle. Koodia selaillessani kuitenkin sanoisin, että jo pelkästään cb puolen toteutus on hitaampi kuin marcoderin DLL-kirjastossa ( http://koti.mbnet.fi/marcoder/cb/dll/cbDLL.cb ), joka ei sekään sovellu esimerkiksi nopeaan grafiikkaan. Päälle tulee vielä tuon cbLib.dll:n aiheuttama viive. Lisäksi käyttäjä luultavasti haluaisi piilottaa nuo kankeat parametrien asettelut omaan funktioon, jota kutsuttaisi tarpeellisilla parametreillä (kukaan tuskin haluaa käyttää viittä rumaa riviä joka kerta, niinkin simppeliin asiaan kuin message boxiin, kuten esimerkissä), jolloin herää kysymys, miksei saman tien kasaisi siihen funktioon kustomoitua, parametreihin pohjautuvaa muistipalan luontia, joka ei veisi juurikaan enempää tilaa, mutta olisi hurjasti nopeampi.
Yhteenvetona näyttäisi siltä että tämä on hyödyllinen jos tarvitsee käyttää ulkopuolisia DLL:iä, ei tarvi hurjaa nopeutta ja pelkää muistipaloja.

User avatar
Cérebro
Newcomer
Posts: 35
Joined: Wed Jul 16, 2008 8:56 pm

Re: cbLib - Paremmat DLL-komennot CoolBasiciin

Post by Cérebro » Sun Nov 23, 2008 8:33 pm

Päivitys:
Käyttää cbDLL:ää.
cbLib_GetFunc:lle annetaan parametrien määrä.
cbLib_CallFunc:lle annetaan parametrit.
Jos parametri on tekstiä, sen edessä täytyy olla $-merkki (esim. "$Tekstiä" huom. muuttuja: "$" + var).
Varoitus: Jos tutkit cbLib_CallFunc:n sisältöä, parametrien säätö on puhdasta purkkaa.

Ensimmäisessä viestissä latauslinkki.
EDIT:

Aavesoturi wrote:cbLib_CallFunc# ja $ versioissa näyttäisi olevan pari ylimääräistä parametriä...
Korjattu.[/edit]
Last edited by Cérebro on Mon Nov 24, 2008 5:50 pm, edited 1 time in total.
cbLib | XMap
In development: EasyBasic - Basic-tyylinen peliohjelmointikieli

User avatar
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: cbLib - Paremmat DLL-komennot CoolBasiciin

Post by Aavesoturi » Mon Nov 24, 2008 12:58 pm

cbLib_CallFunc# ja $ versioissa näyttäisi olevan pari ylimääräistä parametriä...

User avatar
Cérebro
Newcomer
Posts: 35
Joined: Wed Jul 16, 2008 8:56 pm

Re: cbLib - Paremmat DLL-komennot CoolBasiciin

Post by Cérebro » Fri Dec 05, 2008 7:30 pm

Päivitys 2:
Huomasin etteivät cbLib_CallFunc# ja cbLib_CallFunc$-funktiot toimineet (niitä ei oltu määritelty DLL:ssä DLLEXPORT:lla) -> Korjattu.
cbLib_GetFunc:lle ei anneta parametrien määrää, nyt ne ovat dynaamiset.
Edellisestä päivityksestä oli unohtunut WChar-tuki -> Jos tekstin pitää on WChar-muodossa, sen edessä täytyy olla @-merkki.
Nyt mukana tulee myös User32-include ja sille oma esimerkki.
cbLib | XMap
In development: EasyBasic - Basic-tyylinen peliohjelmointikieli

Post Reply