GLBasic forum

Codesnippets => Inline / 3rd party => Topic started by: Kitty Hello on 2008-Jul-30

Title: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Jul-30
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]
Title: Re: Blitz "decl" wrapper
Post by: 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?!?
Title: Re: Blitz "decl" wrapper
Post by: D2O on 2008-Jul-30
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.
Title: Re: Blitz "decl" wrapper
Post by: D2O on 2008-Jul-30
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:
Code (glbasic) Select

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:
Code (glbasic) Select
DECLARE_ALIAS(wrap_BASSMOD_GetVersion, LIB_NAME, "BASSMOD_GetVersion", (), int);
und es mehr so aussehen sollte:
Code (glbasic) Select
DECLARE_ALIAS(wrap_BASSMOD_GetVersion, LIB_NAME, BASSMOD_GetVersion (int);
kan mich auch täuschen =D
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Jul-30
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.
Title: Re: Blitz "decl" wrapper
Post by: D2O on 2008-Jul-30
Hmmm, ich dachte das das Problem in der alleine stehenden klammer steckt, ,,(),int)
wusste nicht mehr ob es sowas gab :S
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Jul-30
Code (glbasic) Select
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.
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Jul-31
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?
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Jul-31
@ Gernot:

Wenn in der Decal datei steht:

.lib " "

dann werden die Funktionen nur zum Highlighten hergenommen!
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Jul-31
...also - die machen dann nichts?
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Jul-31
Genau, da ja in der *.bb-Datei(Projectdatei von BlitzBasic) auch alles nochmal in Funktionen gepackt wird.
Also allein nur für Highlighten.
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Jul-31
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 ;)
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Jul-31
Gernot, ein Filerequest wär gut zum öffnen ;)
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Jul-31
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
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Jul-31
Long braucht halt mehr speicher..
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Jul-31
achso, naja, kommt halt drauf an, bei den heutigen rechnern.mmmm
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Jul-31
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.
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Jul-31
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
Code (glbasic) Select
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:

Code (glbasic) Select
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.
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Jul-31
OK, alles drin.
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Jul-31
okay habs neu convertiert, optionale paramter wären noch sinnvoll, also wenn ein  isGlobal = 0 steht zum beispiel
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Jul-31
kann das in den decl Dateien vorkommen?
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Jul-31
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.
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Jul-31
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 ) 
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Aug-01
LOL! Die Abfrage, ob nun die Funktion da ist hat immer "END" aufgerufen. Update online.
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Aug-01
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?
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Aug-01
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?
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Aug-01
Als Zahl:

Code (glbasic) Select
GLOBAL Variable

Also String:

Code (glbasic) Select
GLOBAL Variable$

Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Aug-01
ach klar, heißt dann variable$ = ("")
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Aug-01
Nein! einfach :

GLOBAL Name$
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Aug-01
nein du verstehst es nicht.

Function blu: a1, a2=0, b$=("")
endfunction

blu(1)   

optionaler parameter, welcher auf "" gesetzt wird wenn nicht angegeben.
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Aug-01
Achso ne Funktion , sags doch -.-


Code (glbasic) Select

FUNCTION Machwas: zahl1, zahl2 = 2, name$ = ""
ENDFUNCTION
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Aug-01
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.
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Aug-01
Na dann mach mal
Title: Re: Blitz "decl" wrapper
Post by: Sebastian 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?
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Aug-01
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!
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Aug-02
ähm egal, ergebnis zählt.

nana sebastian. :whistle:
Title: Re: Blitz "decl" wrapper
Post by: Sebastian on 2008-Aug-02
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:
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Aug-02
dat  :whistle: war doch nur spass
Title: Re: Blitz "decl" wrapper
Post by: bigsofty on 2008-Aug-12
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/
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Sep-16
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
Code (glbasic) Select
befehl("datei.jpg") verwende wird der string auch korrekt übergeben.
aaaber wenn ich
Code (glbasic) Select
befehl("..\images\bild.jpg")   nehme, geht das so nicht.
dabei habe ich mit
Code (glbasic) Select
/ \ ..\ rumprobiert, die datei wird nicht gefunden.

wird bei den strings so ein sonderzeichen nicht mit übergeben?
wie kann man dieses problem lösen?
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Sep-17
In INLINE solltest Du "\\" verwenden statt \. Weil \ ein Escape-Zeichen ist:
\\ = \
\n = Zeilenumbruch
\" = "
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Sep-17
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.
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Sep-17
auch bei GLBasic Strings. Ein \ muss man immer als \\ schreiben. "/" sollte auch gehen.
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Sep-17
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"
Title: Re: Blitz "decl" wrapper
Post by: 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 ;)
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Sep-18
ich scmeiß' mich weg! WAYNE!
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Sep-18
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)
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Sep-18
Ick mein das so.....   
Code (glbasic) Select
block = Xo_LoadMesh("block.b3d") das geht, aber
Code (glbasic) Select
block = Xo_LoadMesh("media/block.b3d") geht net.

Dazugehörige Funktion:

Code (glbasic) Select
FUNCTION Xo_LoadMesh: path$, parent = 0
INLINE
    if(xLoadMesh)
    path_Str.Alloc(512);
      return xLoadMesh(path_Str.GetStrData(),parent); path_Str.CalcLen();
ENDINLINE
ENDFUNCTION


Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Sep-18
mach vorher ein:
Code (glbasic) Select

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
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Sep-20
Code (glbasic) Select
path$ = REPLACE$("/", "\\")

müsste ja

Code (glbasic) Select
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
Code (glbasic) Select
\ in strings machen probleme...

p.s. hab jetzt die aktuelle 5ér drauf...

Lösung
Code (glbasic) Select
path$ = REPLACE$(path$, " / ", " \\ " )
Leerzeichen vor und dannach....
Title: Re: Blitz "decl" wrapper
Post by: Schranz0r on 2008-Sep-21
oder einfach CHR$(dec) benutzen :)  :nana:  :good:  :whistle:


<3  :|
Title: Re: Blitz "decl" wrapper
Post by: Kitty Hello on 2008-Sep-22
Jo. Schranzor hat recht.
oder mach's inline.

path_Str = REPLACE_Str(path_Str, CGStr("/"), CGStr("\\"));
Title: Re: Blitz "decl" wrapper
Post by: Heiko on 2008-Sep-22
war net viel, habs schon alles ersetzt....