Code: Select all
DllFunction "user32.dll" "MessageBoxA" MsgBox(Var f, Var msg As String, Var cap As String, Var mode) As Integer
LoadDll "user32.dll"
MsgBox(0, "Hei", "Viesti", 1)
Code: Select all
DllFunction "user32.dll" "MessageBoxA" MsgBox(Var f, Var msg As String, Var cap As String, Var mode) As Integer
LoadDll "user32.dll"
MsgBox(0, "Hei", "Viesti", 1)
Dll:n funktion määrittelyssä voisi sitten valita erilaisista vaihtoehdoista (kuten std::stringistä).Dibalo wrote:Koska merkkijonot ovat const char*, eikä std::string* kuten pitäisi. Dll-tukeen tarvitaan vielä dokumentaatiota. Kunhan jaksaisi tehdä sen manuaalin....
Code: Select all
DllFunction __stdcall "User32.dll" "MessageBoxA" Messagebox(Var hwnd, Var text As String, Var title As String, Var type) As String
Var MB_OK = 0
LoadDll "User32.dll"
Messagebox(0, "Moi maailmaaaaaa!!", "...", MB_OK)
Toteutettu inline assemblyllä? Käytitkös mahdollisesti esimerkkiäni PS.orgissa? Kiinostaa vain tietääDibalo wrote:Dll-tukea hiottu hieman. Nyt merkkijonot välitetään dll:iin AINA muodossa const char*. Lisäksi poistin sen typerän osoitin-jutun. Lisäksi poistin rajoitukset parametrien lukumäärästä ja muutin muutenkin dll-toimintaa varmemmaksi. Todennäköisesti lisään jossain vaiheessa myös tuen käyttäjän omien tyyppien välittämiseen dll:lle. Lisäksi lisäsin kaksi eri kutsumistyyppiä: __stdcall (WINAPI käyttää) ja __cdecl.
Nyt esimerkiksi seuraava on mahdollista:EDIT: Lisäksi olen parantelemassa Kaaosta myös matalamman tason asioiden suhteen kuten muistinhallinnan ja operaattorien. Jos kaikki menee suunnitelmien mukaan, uuden version logiikka on entistä nopeampaa, exe:n koko on pienentynyt ja muistinkulutus on pienempi. Lisäksi uusi koodirakenne helpottaa minun työtäni päivittää ominaisuuksia ja korjailla mahdollisia bugeja.Code: Select all
DllFunction __stdcall "User32.dll" "MessageBoxA" Messagebox(Var hwnd, Var text As String, Var title As String, Var type) As String Var MB_OK = 0 LoadDll "User32.dll" Messagebox(0, "Moi maailmaaaaaa!!", "...", MB_OK)
Code: Select all
Const sw = 200 //ikkunan leveys
Const sh = 150 //ikkunen korkeus
SCREEN sw,sh,32,2
SetWindow "Plasma effect by misthema"
Repeat
t=timer()/50 //aikaluku
For w=0 To sw
For h=0 To sh
c#=(Sin((w+h+t)*3)+Cos((w-t)*3)+Cos(h-t)*3)*100+t/2 //randomia sinikikkailua
Lock
PutPixel2 w,h, (Int(Sin(c)*64+128) Shl 16) + (Int(Cos(c)*64+128) Shl 8) + 0
Unlock
Next h
Next w
Text 0,0,FPS()
DrawScreen
Forever
Code: Select all
Var sw = 100
Var sh = 75
Var c
Var t
Screen.Set(sw, sh)
Repeat
t=Timer()/50 //aikaluku
For w=0 To sw
For h=0 To sh
c=(Sin((w+h+t)*3)+Cos((w-t)*3)+Cos(h-t)*3)*100+t/2 //randomia sinikikkailua
Screen.SetColor(Sin(c)*64+128, Cos(c)*64+128, 0)
Screen.Dot(w,h)
Next
Next
Screen.SetColor(255,255,255)
Screen.Text(0,0, Screen.FPS())
Screen.Draw
Forever
Käytän valmista engineä, en vain ole päättänyt vielä mitä. Todennäköisesti itse panostan aluksi kaaoksen muihin ominaisuuksiin ja annan halukkaiden koodarigurujen "bindata" jonkin moottorin kaaokselle, jos 3D:llä on kauhea kiire. Tietysti toimin tiivissä yhteistyössä, jotta 3D-ominaisuuksista saataisiin mahdollisimman hyvät.Sami The Great wrote:Ajattelin tässä, että tuleeko kaaokseen oma 3D engine vai käytätkö jotain valmista esim. ogre tai irrlicht? Jos tulee oma niin tuleeko se olemaan pelkkä grafiikka engine niin kuin ogre, vai tuleeko siihen myös muita ominaisuksia kuten törmäys tunnistus?
Code: Select all
StdInclude "ChBNet.cif" // ChaosBasic Interface file tjsp..
Var connect As NetConnection = New NetConnection
connect.StartLoading "http://www.lollol.com/kuva.gif"
Repeat
If connect.IsLoaded() Then
connect.GetData().SaveToFile "imgs/kuva.gif" // GetData() palauttaa MemoryBlock-instanssin
End
EndIf
Screen.Draw
Forever
Code: Select all
StdInclude "ChBNet.cif" // ChaosBasic Interface file tjsp..
Var connect As NetConnection = New NetConnection
Var _integer = 1 As Integer
Var _float = 2 As Integer
Var _string = 3 As Integer
connect.JoinServer("127.0.0.1") //tai jotain muuta sellaista
Repeat
If connect.IsConnected Then
connect.SendDataInt(12837, _integer) //Lähetetään kokonaisluku omassa palassaan...
connect.SendDataFloat(0,21252, _float) //Liukuluku...
connect.SendDataString("merkkijono lol", _string) //Ja merkkijono.
End
EndIf
Screen.Draw
Forever
Code: Select all
connect.GetDataInt(12837, _integer) //Vastaanotetaan kokonaisluku...
connect.GetDataFloat(0,21252, _float) //Liukuluku...
connect.GetDataString("merkkijono lol", _string) //Ja merkkijono.
tarkoitit varmaanMisthema wrote: Ja tuosta tietenkin päinvastaiset komennot:Code: Select all
connect.GetDataInt(12837, _integer) //Vastaanotetaan kokonaisluku... connect.GetDataFloat(0,21252, _float) //Liukuluku... connect.GetDataString("merkkijono lol", _string) //Ja merkkijono.
Täh? Mitä nuo sitten palauttaisivat? Joko ymmärrän ihan väärin tai sitten sinulla on paste&ajatusvirheenä jäänyt tuonne nuo dataparametrit, siis 12837, 0.21252 ja "merkkijono lol". Mihin niitä tarvitaan funktioissa, jotka vastaanottavat dataa?Misthema wrote:*klips*
Ja tuosta tietenkin päinvastaiset komennot:Code: Select all
connect.GetDataInt(12837, _integer) //Vastaanotetaan kokonaisluku... connect.GetDataFloat(0,21252, _float) //Liukuluku... connect.GetDataString("merkkijono lol", _string) //Ja merkkijono.
Eipä ole kirjallisena. Päästä kyllä löytyy...SPuntte wrote:Onko sinulla muuten jotakin "tiekarttaa" tämän projektin suhteen, siis oletko ajatellut, mihin tällä pyrit ja mikä on kielen kohderyhmä? Ihan mielenkiinnosta vaan kyselen.