Attached a program that converts the .decl files from Blitz into a .gbas library, with function wrapping and basic comments for help-creation.
OK, fixed it some more. If you have float as BYREF, it will not work,yet. The rest seems OK.
Attached a bass.dll wrapper, too.
[attachment deleted by admin]
ähm blöde frage, wie verwendet man den, wenn ich compilere und run drück, geht kurz fenszter auf und gleich wieder zu?!?
Quote from: Heiko on 2008-Jul-30
ähm blöde frage, wie verwendet man den, wenn ich compilere und run drück, geht kurz fenszter auf und gleich wieder zu?!?
Hi Heiko,
nur mal ganz kurz den source anschauen ;)
Dann siehst Du dass das ganze über Commandline funktioniert.
Also Exe erstellen und dann die decl auf die exe ziehen, fertig.
Sodele, irgendwas ist noch nicht ganz schlüssig :whistle:
Als ausgabe einer decl:
Quote.lib "BASSMOD.dll"
BASSMOD_GetVersion% () : "BASSMOD_GetVersion"
BASSMOD_ErrorGetCode% () : "BASSMOD_ErrorGetCode"
BASSMOD_Init% (device%,freq%,flags%) : "BASSMOD_Init"
BASSMOD_Free () : "BASSMOD_Free"
BASSMOD_GetCPU# () : "BASSMOD_GetCPU"
BASSMOD_SetVolume% (volume%) : "BASSMOD_SetVolume"
BASSMOD_GetVolume% () : "BASSMOD_GetVolume"
BASSMOD_GetDeviceDescription%(devnum%) : "BASSMOD_GetDeviceDescription"
BASSMOD_MusicDecode%(buffer*,length%) : "BASSMOD_MusicDecode"
BASSMOD_MusicLoad% (mem%,file$,offset%,lenght%,flags%) : "BASSMOD_MusicLoad"
BASSMOD_MusicPlay% () : "BASSMOD_MusicPlay"
BASSMOD_MusicFree () : "BASSMOD_MusicFree"
BASSMOD_MusicGetName$ () : "BASSMOD_MusicGetName"
BASSMOD_MusicGetLength% (playlen%) : "BASSMOD_MusicGetLength"
BASSMOD_MusicPlayEx% (pos%,flags%,reset%) : "BASSMOD_MusicPlayEx"
BASSMOD_MusicSetAmplify% (amp%) : "BASSMOD_MusicSetAmplify"
BASSMOD_MusicSetPositionScaler% (scale%) : "BASSMOD_MusicSetPositionScaler"
BASSMOD_MusicSetVolume% (chanins%, volume%) : "BASSMOD_MusicSetVolume"
BASSMOD_MusicGetVolume% (chanins%) : "BASSMOD_MusicGetVolume"
BASSMOD_MusicIsActive% () : "BASSMOD_MusicIsActive"
BASSMOD_MusicStop% () : "BASSMOD_MusicStop"
BASSMOD_MusicPause% () : "BASSMOD_MusicPause"
BASSMOD_MusicSetPosition% (pos%) : "BASSMOD_MusicSetPosition"
BASSMOD_MusicGetPosition% () : "BASSMOD_MusicGetPosition"
BASSMOD_MusicSetSync%(typ%,param%,proc*,user%) : "BASSMOD_MusicSetSync"
BASSMOD_MusicRemoveSync%(Handle) : "BASSMOD_MusicRemoveSync"
.lib "Kernel32.dll"
BASSMOD_RtlMoveMemory1%(Destination*,Source,Length) : "RtlMoveMemory"
BASSMOD_RtlMoveMemory2%(Destination,Source*,Length) : "RtlMoveMemory"
.lib " "
BASSMOD_GetDeviceDescriptionString$(device%) : ""
BASSMOD_GetErrorString$() : ""
BASSMOD_MakeLong%(lo%,hi%) : ""
BASSMOD_MakeHiWord%(val%) : ""
BASSMOD_MakeLoWord%(val%) : ""
erhalte ich das hier:
INLINE
#define LIB_NAME "BASSMOD.dll"
DECLARE_ALIAS(wrap_BASSMOD_GetVersion, LIB_NAME, "BASSMOD_GetVersion", (), int);
DECLARE_ALIAS(wrap_BASSMOD_ErrorGetCode, LIB_NAME, "BASSMOD_ErrorGetCode", (), int);
DECLARE_ALIAS(wrap_BASSMOD_Init, LIB_NAME, "BASSMOD_Init", (int,int,int), int);
DECLARE_ALIAS(wrap_BASSMOD_Free, LIB_NAME, "BASSMOD_Free", (), void);
DECLARE_ALIAS(wrap_BASSMOD_GetCPU, LIB_NAME, "BASSMOD_GetCPU", (), float);
DECLARE_ALIAS(wrap_BASSMOD_SetVolume, LIB_NAME, "BASSMOD_SetVolume", (int), int);
DECLARE_ALIAS(wrap_BASSMOD_GetVolume, LIB_NAME, "BASSMOD_GetVolume", (), int);
DECLARE_ALIAS(wrap_BASSMOD_GetDeviceDescription, LIB_NAME, "BASSMOD_GetDeviceDescription", (int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicDecode, LIB_NAME, "BASSMOD_MusicDecode", (void*,int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicLoad, LIB_NAME, "BASSMOD_MusicLoad", (int,char*,int,int,int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicPlay, LIB_NAME, "BASSMOD_MusicPlay", (), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicFree, LIB_NAME, "BASSMOD_MusicFree", (), void);
DECLARE_ALIAS(wrap_BASSMOD_MusicGetName, LIB_NAME, "BASSMOD_MusicGetName", (), char*);
DECLARE_ALIAS(wrap_BASSMOD_MusicGetLength, LIB_NAME, "BASSMOD_MusicGetLength", (int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicPlayEx, LIB_NAME, "BASSMOD_MusicPlayEx", (int,int,int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicSetAmplify, LIB_NAME, "BASSMOD_MusicSetAmplify", (int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicSetPositionScaler, LIB_NAME, "BASSMOD_MusicSetPositionScaler", (int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicSetVolume, LIB_NAME, "BASSMOD_MusicSetVolume", (int,int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicGetVolume, LIB_NAME, "BASSMOD_MusicGetVolume", (int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicIsActive, LIB_NAME, "BASSMOD_MusicIsActive", (), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicStop, LIB_NAME, "BASSMOD_MusicStop", (), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicPause, LIB_NAME, "BASSMOD_MusicPause", (), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicSetPosition, LIB_NAME, "BASSMOD_MusicSetPosition", (int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicGetPosition, LIB_NAME, "BASSMOD_MusicGetPosition", (), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicSetSync, LIB_NAME, "BASSMOD_MusicSetSync", (int,int,void*,int), int);
DECLARE_ALIAS(wrap_BASSMOD_MusicRemoveSync, LIB_NAME, "BASSMOD_MusicRemoveSync", (void), int);
#define LIB_NAME "Kernel32.dll"
DECLARE_ALIAS(wrap_BASSMOD_RtlMoveMemory1, LIB_NAME, "RtlMoveMemory", (void*,void,void), int);
DECLARE_ALIAS(wrap_BASSMOD_RtlMoveMemory2, LIB_NAME, "RtlMoveMemory", (void,void*,void), int);
#define LIB_NAME " "
DECLARE_ALIAS(wrap_BASSMOD_GetDeviceDescriptionString, LIB_NAME, "BASSMOD_GetDeviceDescriptionString", (int), char*);
DECLARE_ALIAS(wrap_BASSMOD_GetErrorString, LIB_NAME, "BASSMOD_GetErrorString", (), char*);
DECLARE_ALIAS(wrap_BASSMOD_MakeLong, LIB_NAME, "BASSMOD_MakeLong", (int,int), int);
DECLARE_ALIAS(wrap_BASSMOD_MakeHiWord, LIB_NAME, "BASSMOD_MakeHiWord", (int), int);
DECLARE_ALIAS(wrap_BASSMOD_MakeLoWord, LIB_NAME, "BASSMOD_MakeLoWord", (int), int);
ENDINLINE
//! BASSMOD_GetVersion
// \return
FUNCTION BASSMOD_GetVersion:
INLINE
return wrap_BASSMOD_GetVersion();
ENDINLINE
ENDFUNCTION
//! BASSMOD_ErrorGetCode
// \return
FUNCTION BASSMOD_ErrorGetCode:
INLINE
return wrap_BASSMOD_ErrorGetCode();
ENDINLINE
ENDFUNCTION
//! BASSMOD_Init
// \return
// \param device -
// \param freq -
// \param flags -
FUNCTION BASSMOD_Init: device,freq,flags
INLINE
return wrap_BASSMOD_Init((int)device,(int)freq,(int)flags);
ENDINLINE
ENDFUNCTION
//! BASSMOD_Free
FUNCTION BASSMOD_Free:
INLINE
wrap_BASSMOD_Free();
ENDINLINE
ENDFUNCTION
//! BASSMOD_GetCPU
// \return
FUNCTION BASSMOD_GetCPU:
INLINE
return wrap_BASSMOD_GetCPU();
ENDINLINE
ENDFUNCTION
//! BASSMOD_SetVolume
// \return
// \param volume -
FUNCTION BASSMOD_SetVolume: volume
INLINE
return wrap_BASSMOD_SetVolume((int)volume);
ENDINLINE
ENDFUNCTION
//! BASSMOD_GetVolume
// \return
FUNCTION BASSMOD_GetVolume:
INLINE
return wrap_BASSMOD_GetVolume();
ENDINLINE
ENDFUNCTION
//! BASSMOD_GetDeviceDescription
// \return
// \param devnum -
FUNCTION BASSMOD_GetDeviceDescription: devnum
INLINE
return wrap_BASSMOD_GetDeviceDescription((int)devnum);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicDecode
// \return
// \param buffer -
// \param length -
FUNCTION BASSMOD_MusicDecode: buffer,length
INLINE
return wrap_BASSMOD_MusicDecode((void*)(unsigned int)buffer,(int)length);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicLoad
// \return
// \param mem -
// \param file$ -
// \param offset -
// \param lenght -
// \param flags -
FUNCTION BASSMOD_MusicLoad: mem,file$,offset,lenght,flags
INLINE
file_Str.Alloc(512);
return wrap_BASSMOD_MusicLoad((int)mem,(char*)file_Str.GetStrData(),(int)offset,(int)lenght,(int)flags);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicPlay
// \return
FUNCTION BASSMOD_MusicPlay:
INLINE
return wrap_BASSMOD_MusicPlay();
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicFree
FUNCTION BASSMOD_MusicFree:
INLINE
wrap_BASSMOD_MusicFree();
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicGetName
// \return
FUNCTION BASSMOD_MusicGetName$:
INLINE
return wrap_BASSMOD_MusicGetName();
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicGetLength
// \return
// \param playlen -
FUNCTION BASSMOD_MusicGetLength: playlen
INLINE
return wrap_BASSMOD_MusicGetLength((int)playlen);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicPlayEx
// \return
// \param pos -
// \param flags -
// \param reset -
FUNCTION BASSMOD_MusicPlayEx: pos,flags,reset
INLINE
return wrap_BASSMOD_MusicPlayEx((int)pos,(int)flags,(int)reset);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicSetAmplify
// \return
// \param amp -
FUNCTION BASSMOD_MusicSetAmplify: amp
INLINE
return wrap_BASSMOD_MusicSetAmplify((int)amp);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicSetPositionScaler
// \return
// \param scale -
FUNCTION BASSMOD_MusicSetPositionScaler: scale
INLINE
return wrap_BASSMOD_MusicSetPositionScaler((int)scale);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicSetVolume
// \return
// \param chanins -
// \param volume -
FUNCTION BASSMOD_MusicSetVolume: chanins,volume
INLINE
return wrap_BASSMOD_MusicSetVolume((int)chanins,(int)volume);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicGetVolume
// \return
// \param chanins -
FUNCTION BASSMOD_MusicGetVolume: chanins
INLINE
return wrap_BASSMOD_MusicGetVolume((int)chanins);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicIsActive
// \return
FUNCTION BASSMOD_MusicIsActive:
INLINE
return wrap_BASSMOD_MusicIsActive();
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicStop
// \return
FUNCTION BASSMOD_MusicStop:
INLINE
return wrap_BASSMOD_MusicStop();
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicPause
// \return
FUNCTION BASSMOD_MusicPause:
INLINE
return wrap_BASSMOD_MusicPause();
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicSetPosition
// \return
// \param pos -
FUNCTION BASSMOD_MusicSetPosition: pos
INLINE
return wrap_BASSMOD_MusicSetPosition((int)pos);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicGetPosition
// \return
FUNCTION BASSMOD_MusicGetPosition:
INLINE
return wrap_BASSMOD_MusicGetPosition();
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicSetSync
// \return
// \param typ -
// \param param -
// \param proc -
// \param user -
FUNCTION BASSMOD_MusicSetSync: typ,param,proc,user
INLINE
return wrap_BASSMOD_MusicSetSync((int)typ,(int)param,(void*)(unsigned int)proc,(int)user);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MusicRemoveSync
// \return
// \param Handle -
FUNCTION BASSMOD_MusicRemoveSync: Handle
INLINE
return wrap_BASSMOD_MusicRemoveSync((void)Handle);
ENDINLINE
ENDFUNCTION
//! BASSMOD_RtlMoveMemory1
// \return
// \param Destination -
// \param Source -
// \param Length -
FUNCTION BASSMOD_RtlMoveMemory1: Destination,Source,Length
INLINE
return wrap_BASSMOD_RtlMoveMemory1((void*)(unsigned int)Destination,(void)Source,(void)Length);
ENDINLINE
ENDFUNCTION
//! BASSMOD_RtlMoveMemory2
// \return
// \param Destination -
// \param Source -
// \param Length -
FUNCTION BASSMOD_RtlMoveMemory2: Destination,Source,Length
INLINE
return wrap_BASSMOD_RtlMoveMemory2((void)Destination,(void*)(unsigned int)Source,(void)Length);
ENDINLINE
ENDFUNCTION
//! BASSMOD_GetDeviceDescriptionString
// \return
// \param device -
FUNCTION BASSMOD_GetDeviceDescriptionString$: device
INLINE
return wrap_BASSMOD_GetDeviceDescriptionString((int)device);
ENDINLINE
ENDFUNCTION
//! BASSMOD_GetErrorString
// \return
FUNCTION BASSMOD_GetErrorString$:
INLINE
return wrap_BASSMOD_GetErrorString();
ENDINLINE
ENDFUNCTION
//! BASSMOD_MakeLong
// \return
// \param lo -
// \param hi -
FUNCTION BASSMOD_MakeLong: lo,hi
INLINE
return wrap_BASSMOD_MakeLong((int)lo,(int)hi);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MakeHiWord
// \return
// \param val -
FUNCTION BASSMOD_MakeHiWord: val
INLINE
return wrap_BASSMOD_MakeHiWord((int)val);
ENDINLINE
ENDFUNCTION
//! BASSMOD_MakeLoWord
// \return
// \param val -
FUNCTION BASSMOD_MakeLoWord: val
INLINE
return wrap_BASSMOD_MakeLoWord((int)val);
ENDINLINE
ENDFUNCTION
der Fehlermeldung:
Quote
_______________________________________
*** Configuration: WIN32 ***
precompiling:
GPC - GLBasic Precompiler V.2008.210 - 3D, NET
Wordcount:0 commands
compiling:
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:44: error: `<anonymous>' has incomplete type
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:44: error: invalid use of `void'
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:44: error: `<anonymous>' has incomplete type
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:44: error: invalid use of `void'
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:45: error: `<anonymous>' has incomplete type
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:45: error: invalid use of `void'
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:45: error: `<anonymous>' has incomplete type
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:45: error: invalid use of `void'
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp: In function `DGInt __GLBASIC__::BASSMOD_MusicRemoveSync(DGInt)':
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:569: error: too many arguments to function
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp: In function `DGInt __GLBASIC__::BASSMOD_RtlMoveMemory1(DGInt, DGInt, DGInt)':
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:593: error: void value not ignored as it ought to be
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp: In function `DGInt __GLBASIC__::BASSMOD_RtlMoveMemory2(DGInt, DGInt, DGInt)':
C:\DOKUME~1\Fabbio\LOKALE~1\Temp\glbasic\gpc_temp1.cpp:617: error: void value not ignored as it ought to be
*** FATAL ERROR - Bitte die Compiler-Ausgabe ins Forum kopieren
_______________________________________
*** Fertig ***
Dauer: 1.0 sek. Zeit: 18:25
Erstellen: 0 erfolgreich.
*** 1 FEHLGESCHLAGEN ***
Ich glaube, da ich kein C/Cpp profie bin das der hund hier begraben ist:
DECLARE_ALIAS(wrap_BASSMOD_GetVersion, LIB_NAME, "BASSMOD_GetVersion", (), int);
und es mehr so aussehen sollte:
DECLARE_ALIAS(wrap_BASSMOD_GetVersion, LIB_NAME, BASSMOD_GetVersion (int);
kan mich auch täuschen =D
nööö, die zweiten "" hinten sind schon korrekt, soweit ich weiß.
und der das mitm void usw. läßt darauf schliessen, dass die dll was anderes als return erwartet bzw. als übergebenen parameter, aber das zählt halt zu der problematik, die gernot ansprach, dass man hinterher bei den datentypen eh nachbessern muss.
aber auf jeden fall ne schicke ausgabe, grins.
Hmmm, ich dachte das das Problem in der alleine stehenden klammer steckt, ,,(),int)
wusste nicht mehr ob es sowas gab :S
DECLARE_ALIAS(xGetFPS, DLL, "_xGetFPS@0",(),long);
nein, so is das bei mir auch normal.
wird halt kein wert an die funktion übergeben und ein long integer zurückgegeben.
1. in der decl:
.lib " "
Was soll das heissen?
2. .lib "Kernel32.dll"
BASSMOD_RtlMoveMemory1%(Destination*,Source,Length) : "RtlMoveMemory"
BASSMOD_RtlMoveMemory2%(Destination,Source*,Length) : "RtlMoveMemory"
Welchen Typ haben "Source" und "Length"? Muss da nicht ein # stehen?
@ Gernot:
Wenn in der Decal datei steht:
.lib " "
dann werden die Funktionen nur zum Highlighten hergenommen!
...also - die machen dann nichts?
Genau, da ja in der *.bb-Datei(Projectdatei von BlitzBasic) auch alles nochmal in Funktionen gepackt wird.
Also allein nur für Highlighten.
OK. Update im 1. Post. Ich hab auch die Parameter ohne "#,$,%..." jetzt als "int" gemacht und meherere Libs in einer Datei unterstützt. Wird schon langsam ;)
Gernot, ein Filerequest wär gut zum öffnen ;)
tipp, ich würd statt int long machen.
bei pb is das standard, und ich hab ja die pb include zum umbauen zu beginn genommen, und da ist fast alles long statt int, wenn nicht soagr ganz alles.
läßt halt ein paar rückschlüsse zu, wenn ich das richtig verstanden hab, naja notfalls gibts ja die von hand "ersetzen" funktion im editor, schönes feature übrigends, grins
Long braucht halt mehr speicher..
achso, naja, kommt halt drauf an, bei den heutigen rechnern.mmmm
Papperlapapp. int und long ist auf 32 bit rechnen "gleich".
Und long ist bei x64 *falsch*, weil Du sonst einen 64bit integer übergibst, wo ein 32er gefragt ist -> da schepperts.
Wie gesagt, diese ganze DLL wrapperei hat schon seine Tücken.
ach ja hab zweit kleine bitten
1. wo du grad bei dem converter bist, sinnvoll wäre dass bei den funktionen direkt nach dem inline ein if(bla)
kommen würde, wenn in der dll die funktion noch nicht vorhanden ist, sonst gibts fehler, gerade bei so beta geschichten ist das richtig nützlich, ich schreibe grad für ne menge funktionen dieses if(bla) von hand nach.
womit wir zur zweiten frage kommen, bzw. bitte
2. also is nur eine frage, nur wenn du paar minuten zeit hast, meine gbas hat ja die teils gewrappten funktionen drin, und da fehlt nun überall das if(bla).könntest du einen converter o.s. zusammen klicken wie du so schön sagtest, die in meiner gbas (sind nämlich zwei mit haufen funktionen drin, dieses if(bla) hinzufügen?
beispiel:
FUNCTION Xo_LoadVertexShader: path$,epoint$,ver
INLINE
if(xLoadVertexShader)
path_Str.Alloc(512);
epoint_Str.Alloc(512);
return xLoadVertexShader(path_Str.GetStrData(),epoint_Str.GetStrData(),ver);
ENDINLINE
ENDFUNCTION
wenn ich neu convertiere mit deinem wrapper, muss ich sonst wieder alles neu anpassen, war ne heidenarbeit.
OK, alles drin.
okay habs neu convertiert, optionale paramter wären noch sinnvoll, also wenn ein isGlobal = 0 steht zum beispiel
kann das in den decl Dateien vorkommen?
ja, steht dan glaub ich immer hinter den parametern die an eine funktion übergeben werden.
is aber egal, ich muss alles von hand machen, mit der convertierten decl geht nun garnichts mehr.
werd das wohl doch von hand machen müssen.
Leider muss ich das bestätigen, hab mir das gewrappe angeschaut, und gestartet.... nix ging :(
Dann das "alte" das ging .... find ich komisch.... denke da ist irgendwo (tief hintern Berg, da wo die Schlümpfe wohnen) ein ganz kleiner Gargamel versteckt :)
Wenn ich ihn sehen sollte sag ichs dir Papa-Schlumpf :D
(Komisch irgendwie bin ich grad gut drauf :P )
LOL! Die Abfrage, ob nun die Funktion da ist hat immer "END" aufgerufen. Update online.
hab auch nen fehler entdeckt, da sollte einer funktion ein int übergeben werden, im declare stand aber hartnäckig void.
nunja die optionalen werte sindnoch nicht mit drin.
also wenn in der funktion steht
function bla: a, b, c=0, d=0
endfunction
zum beispiel
aber ich hab es zum laufen gebracht, mein gewrapptes, aber irgendwie alles verdreht, also tastensteuerung, meine spielfigur is irgendwie weg, nicht mehr zu sehen.
schranz0r hat ja den source, und die decl kann man sich bei rubux.net runterladen.
ich hab eine funktionierende von hand gebaute version und eben eine konvertierte nicht funktionierende version.mmmmm
@gernot, ich mach meinen wrapper morgen fertig, ich versuchs zumindest, is haufen schreibarbeit. und sende dir dann die decl und die gbas von mir.
dann hättest du quelle und ziel, und könntest den converter schonmal bisschen anpassen.ist ja bald alles drin, was in so einer gewandelten gbas stehen könnte.
okay?
noch eine frage, vorher definierte parameter sind ja klar, ala parameter1 = 0 soweit klar.
was ist wenn dort keine zahl, sondern ein platzhalter stehe sollte.
also falls ein parameter nicht angebenen wirde, ein parameter2 = "" stehen soll. muss das irgendwie ander geschrieben werden?
ich denke mal parameter2 = (""), richtig oder?
Als Zahl:
GLOBAL Variable
Also String:
GLOBAL Variable$
ach klar, heißt dann variable$ = ("")
Nein! einfach :
GLOBAL Name$
nein du verstehst es nicht.
Function blu: a1, a2=0, b$=("")
endfunction
blu(1)
optionaler parameter, welcher auf "" gesetzt wird wenn nicht angegeben.
Achso ne Funktion , sags doch -.-
FUNCTION Machwas: zahl1, zahl2 = 2, name$ = ""
ENDFUNCTION
genau das mein ich, dachte ich habs in einem der vorigen posts so erklärt.
alles klar.
heut nacht noch, wenn ich net einschlaf und der xors3d wrapper ist sogut wie fertig.
muss aber wegen den kollisionen physx einbauen, weils die sphere-poly kollision noch nich gibt in collisions.is halt im moment noch beta.
aber wenn ich physx eingebaut habe, steht hammer 3d spielen nix mehr im wege.
hab inzwischen nebenbei ja schon nen ordentliches grundgerüst fertig.für das spiel.
Na dann mach mal
Quoteaber wenn ich physx eingebaut habe, steht hammer 3d spielen nix mehr im wege.
Was steht ihnen denn ohne Xors3D und PhysX im Wege?
Quote from: Pwnlicious on 2008-Aug-01
Quoteaber wenn ich physx eingebaut habe, steht hammer 3d spielen nix mehr im wege.
Was steht ihnen denn ohne Xors3D und PhysX im Wege?
Köstlich :D
Deshalb musste trotzdem Programmieren Heiko, da nimmt sich eine Programmiersprache der anderen garnichts!
ähm egal, ergebnis zählt.
nana sebastian. :whistle:
Nur damit das Pfeifen nicht so im Raum stehen bleibt:
Ja, GLBasic ist nicht perfekt. Perfektion gibt es nicht, das ist eine Frage der Präferenzen. Es gibt Dinge die mich stören, man ist selten im Leben wunschlos glücklich. Aber wie ich Heiko auch gesagt habe verwenden wir (wir = ich und Floss, welcher für den 3D Content Verantwortlich ist und übrigens Game Design studiert!) für unsere (siehe "wir") Projekte (= bisher ein Projekt, das schon umfangreich genug ist) NICHT GLBasic, weil es einfach für den 3D Content eine Heidenarbeit ist, alles per Keyframe Animationen zu machen. Bone Animationen haben noch andere Vorteile als das blosse animieren, beispielsweise, dass man sie im Spiel selber ansprechen und direkt manipulieren kann. Aber das ist nichts Neues, ich habe das gestern (Freitag) auch im IRC erwähnt. Genauso wie ich nach wie vor für alle meine persönlichen Projekte (= meine Solovorstellungen) GLBasic verwende. Und zwar GLBasic pur ohne 3rd Party Libraries. Das kann sich in Zukunft ändern um Features hinzuzufügen aber nicht um Features zu ersetzen (maximal Newton durch Havok austauschen wenn ich viel Zeit und Nerven habe und es brauche). Der Normal Map Combiner ist 100% GLBasic beispielsweise. GLBasic ist durchaus ein geeignetes Tool für den professionellen Einsatz in der Spieleprogrammierung und was ich bisher durch IRC "lauschen" ( ;) ) mitbekommen habe hat ausgereicht um zu entscheiden, dass ich auch PureBasic in Zukunft nicht mehr brauchen werde. "hammer 3d spielen" steht höchstens eins im Weg und dieses Hindernis sitzt bei jedem von uns knapp 30-60cm vor dem Bildschirm (egal ob das Programmieren oder 3D Modelle oder Sound angeht).
Quoteähm egal, ergebnis zählt.
1. es ist nicht egal.
2. der Weg mag nicht das Ziel sein, aber der Weg ist ebenso wichtig. Der Weg bringt uns etwas sehr Wichtiges, etwas das dir noch fehlt weil du eben noch Anfänger bist: Erfahrung. Beispiel: ich habe mich geärgert, dass GLBasic keine eigene Terrainfunktion hatte. Aber ich hatte die theoretischen Grundlagen um mit Hilfe von Gernot trotzdem etwas zu bewerkstelligen und im Nachhinein bin ich schon ein bisschen selbstzufrieden. Hast du die theoretischen Grundlagen für ein Terrain System parat? Es ist ein Unterschied, ob man sich über etwas beschwert bzw. Hilfe erbittet und Know-How hat, oder ob man den Weg zu seinem Ziel nur so schnell wie möglich ohne Rücksicht auf Verluste zurücklegen will.
Ob du jetzt Xors3D oder was auch immer verwendest: mit GLBasic, scharfem Nachdenken und etwas Hilfe (und du weisst, dass ich noch nie eine Frage von dir unbeantwortet gelassen habe, auch wenn du manchmal nicht zufrieden mit meinen Antworten gewesen sein solltest) wirst du mit deinen Aufgaben wachsen. Halte dich an diese Community und du kannst ne Menge lernen (alleine die Beispielcodes im Sample Ordner von GLBasic waren für mich sehr lehrreich). Auch Fragen sind erwünscht. Aber es läuft normalerweise so ab:
1. Du hast ein Problem
2. Du denkst nach und hast eine Idee
3. Du arbeitest mit deiner Idee und kannst das Problem nicht lösen
4. Du suchst im Forum ob schon jmd. das Problem hatte
5. Du frägst um Rat bzw. nach Hilfe
Manchmal bist du bei Schritt 2, gehst aber dann sofort zu Schritt 5. Das sieht dann so aus, als sollten andere für dich deine Ideen verwirklichen (auch wenn es nicht so gemeint sein sollte). Dann begegnet man dir natürlich eher abgeneigt.
Manchmal gehst du direkt von 1 nach 5, was dann noch schlimmer ist. Wenn du an Punkt 2 scheiterst darfst du gerne um Rat fragen, dann aber nicht erwarten, dass man dir funktionsfähigen Code hinwirft. Eine Ausnahme gibt es aber, wo du von Punkt 1 nach 5 gehen darfst: wenn ein für dich notwendiges Feature fehlt, dass du nicht selber einbauen kannst :good:
So, und jetzt geh ich auch ins Bett, ich hab Urlaub vom Coden, jede Woche von Freitag abend bis Sonntag nachmittag (Ausnahmen bestätigen die Regel) :good: Und wenn ich wiederkomme will ich kein Tränenmeer oder abgebrannte Foren vorfinden :help:
P.S.: Heiko, ich versuche gerade den Ruf des faulen Vollidioten abzulegen. Also bitte spar dir :whistle: sonst behalte ich mir das Recht vor, deine PMs in Zukunft nicht mehr zu beantworten, k? :booze:
dat :whistle: war doch nur spass
This is great! :D
The Xors3D library is fully DX9 ( If only it was OpenGL it would be perfect :( ) compatible, has PhysX API support, shaders and the Blitz API compatibility (3D Entity system, Landscapes... etc)...! Creating a wrapper should be simple... finger crossed? Heiko has already started one, kudos to him :)
Now this combined with my favourite language GLBASIC...! I thought I would have to back to plain old Blitz to use this 3D Engine, so this is great news for me!
See here... http://www.rubux.net/
Ich hab da mal eine Frage.
Und zwar macht der wrapper ja bei stringeingaben (pfade zum beispiel) dieses bla_getstring (irgendwas, sitzt grad im inetcafe)
und das funktioniert auch soweit.
wenn ich einen pfad als befehl("datei.jpg")
verwende wird der string auch korrekt übergeben.
aaaber wenn ich befehl("..\images\bild.jpg")
nehme, geht das so nicht.
dabei habe ich mit / \ ..\
rumprobiert, die datei wird nicht gefunden.
wird bei den strings so ein sonderzeichen nicht mit übergeben?
wie kann man dieses problem lösen?
In INLINE solltest Du "\\" verwenden statt \. Weil \ ein Escape-Zeichen ist:
\\ = \
\n = Zeilenumbruch
\" = "
im INLINE?
Nein, wenn ich einen String an eine Funktion in der wrapper datei übergebe, dann passiert das.
Also Funktion pfad$
dann kann ich nur Funktion("bild.jpg") nehmen, jedoch keinen pfad dazu angeben.
auch bei GLBasic Strings. Ein \ muss man immer als \\ schreiben. "/" sollte auch gehen.
Häää ist doch Wayne... (http://www.msi-forum.de/msi_images/smilies/wayne.gif)
Also so wie ich es grade rauslesen konnte willst du einen Pfad in einer Variable übergeben?
Wayne_interessierts$ = "Bilder/Wayne_interessierts.png"
ich kann mir vorstellen das es Wayne auch mal nicht interessiert. Warum müsst ihr Wayne immer mit sonem müll belagern ;)
ich scmeiß' mich weg! WAYNE!
Quote from: trucidare on 2008-Sep-18
ich kann mir vorstellen das es Wayne auch mal nicht interessiert. Warum müsst ihr Wayne immer mit sonem müll belagern ;)
ähhhh ... : (http://www.msi-forum.de/msi_images/smilies/wayne.gif)
Ick mein das so..... block = Xo_LoadMesh("block.b3d")
das geht, aber block = Xo_LoadMesh("media/block.b3d")
geht net.
Dazugehörige Funktion:
FUNCTION Xo_LoadMesh: path$, parent = 0
INLINE
if(xLoadMesh)
path_Str.Alloc(512);
return xLoadMesh(path_Str.GetStrData(),parent); path_Str.CalcLen();
ENDINLINE
ENDFUNCTION
mach vorher ein:
FUNCTION Xo_LoadMesh: path$, parent = 0
path$ = REPLACE$("/", "\\")
INLINE
if(xLoadMesh)
path_Str.Alloc(512);
return xLoadMesh(path_Str.GetStrData(),parent); path_Str.CalcLen();
ENDINLINE
ENDFUNCTION
path$ = REPLACE$("/", "\\")
müsste ja
path$ = REPLACE$(path$, "/", "\\")
heißen...
aber kommt trotzdem so oder so ein SYNTAX ERROR beim Compilieren.....
Fehler liegt in "\\". Wenn ich die \\ als string nehme, erscheint die schliessende klammer immer noch "string"grau, und nicht weiß.
fazit \
in strings machen probleme...
p.s. hab jetzt die aktuelle 5ér drauf...
Lösung
path$ = REPLACE$(path$, " / ", " \\ " )
Leerzeichen vor und dannach....
oder einfach CHR$(dec) benutzen :) :nana: :good: :whistle:
<3 :|
Jo. Schranzor hat recht.
oder mach's inline.
path_Str = REPLACE_Str(path_Str, CGStr("/"), CGStr("\\"));
war net viel, habs schon alles ersetzt....