GLBasic Benutzerhandbuch

Main sections

INLINE

INLINE
C++ commandos
ENDINLINE



Erlaubt C++ code mitten im GLBasic Programm.
Achtung: Das ist nur für Benutzer gedacht, die exakt wissen was sie machen möchten! Ab hier ist Schluss mit "einfachste Programmiersprache der Welt"!

- Die Zahlen haben den Datentyp "DGInt". Das ist unter PC ein 64bit double, beim PocketPC ein 32bit float.
- Strings sind vom Typ "DGStr". Zeichneketten sind immer 8bit ascii. Unicode-Konvertierung erfolg mittels GLBasic Befehlen.
- Ein '$' ist in C++ "_Str". Also a$ wird a_Str.
- Einen const char* von einem DGStr bekommt man mit my_Str.c_str();
- Einen char* mit mindestens 'x' bytes Länge bekommt man mit: my_Str.getbuffer(x);
- Alle GLBasic Funktionen haben eine Parameterliste: z.B. MOUSEWAIT( );
- Ein Zahlenfeld hat den Typ "DGIntArray".
- Ein Stringfeld ist vom Typ "DGArray<DGStr>". DGArray ist eine Template Klasse für DIM/REDIM und benötigt einen ( ) und einen = operator.
- Auf Felder greift man statt a[x][y] mit a(x, y) zu.
- es ist _nichts_ definiert! Bitte nötige Funktionen deklarieren.
- INLINE startet im namespace __GLBASIC__. Beim Ändern bitte wiederherstellen!
- GLBASIC_HWND() liefert das HWND des GLBasic Hauptfensters.
- GETSUBADDRESS(const DGStr& name) liefert einen Zeiger auf eine SUB analog zu CALLBYNAME. Eine SUB hat den Typ: DGInt(*sub)();
- get_sprite_texture(id) liefert die Texture-ID für glBindTexture.


DLL - Funktionen ansprechen


Die wohl am häufigsten genutze Funktionalität is das laden von Funktionen aus DLLs zur Verwendung mit GLBasic. Dazu wurden einige angenehme Funktionen hinzugefügt:

Von Hand laden:
// Lädt die Funktion "foo" aus my.dll in den Zeiger: foo
void (__stdcall* foo)(int, char); // Deklaration
void LoadDllFunction()
{
DLLCALL("my.dll", "foo", (void**) &foo);
}


Automatisch laden lassen:
// ausserhalb von Funktionen:
// DECLARE(name, "dll", (parameter), rückgabetyp)
DECLARE(foo, "my.dll", (int, char), void);

// DECLARE_ALIAS(name, "dll", "echter_name", (parameter), rückgabewert)
DECLARE_ALIAS(foo, "my.dll", "foo@4", (int, char), void);

Die Parameter müssen in Runden Klammern stehen. Es kann sein, dass der Funktionsname in der DLL von dem Prototypen abweicht. Dafür kann man DECLARE_ALIAS verwenden.

Wenn die Funktion eine __cdecl Funktion ist (also kein __stdcall), hängt man an DECLARE ein _C an:
DECLARE_C(foo, "my.dll", (int, char), void);
DECLARE_C_ALIAS(foo, "my.dll", "foo@4", (int, char), void);

Die DLL und die Funktion wird beim Programmstart geladen und beim Beenden wieder frei gegeben. Man sollte untersuchen, ob die Funktion geladen werden konnte:
if(foo)
{
    // alles im grünen Bereich
}



// INLINE

LOCAL C
C = 41
INLINE
C++;
ENDINLINE

PRINT "C="+C, 100, 100

See also...