Hi an alle
Gibt es den die möglichkeit Header-Datein in GLBasic ein zu binden?
Wenn ja, wie?
Und muss man den Namespace Beenden oder What :D ?
Kleines Biespiel wär Subba =)
Ich möchte auch noch mal:
Nach dem ich nun erfolgreich die Lib´s gelinkt habe kommt das problem mit den includes:
hier erstmal mein code
INLINE
}
#include
#include
namespace __GLBASIC__ {
ENDINLINE
ok kompilieren und linken ohne fehler. nun will ich sdl und sdl_net initialisieren:
INLINE
}
#include
#include
SDL_Init(1);
SDLNet_Init();
namespace __GLBASIC__ {
ENDINLINE
hier gibts dann die fehler:
QuoteC:/DOKUME~1/DIVINE~1/LOKALE~1/Temp/glbasic/gpc_temp1.cpp:15: error: expected constructor, destructor, or type conversion before '(' token
C:/DOKUME~1/DIVINE~1/LOKALE~1/Temp/glbasic/gpc_temp1.cpp:15: error: expected `,' or `;' before '(' token
C:/DOKUME~1/DIVINE~1/LOKALE~1/Temp/glbasic/gpc_temp1.cpp:16: error: expected constructor, destructor, or type conversion before ';' token
habt ihr einen Vorschlag wie ich das lösen kann?
Du kannst keine Funktionen aufrufen ausserhalb von einer Funktion. Also entweder das SDL_Init in "FUNCTION foo:" packen, oder in eine C Funktion:
void foo() {... }
Wenn man GLBasic Dateien einpacken will, einfach in's Projekt übernehmen und fertig.
ok ok ich weiß, man soll die Finger von INLINE lassen, wenn man nicht wirklich Ahnung von C++ hat. Trotzdem! ;)
Habe jetzt den ganzen Abend an folgenden Problem rumgefummelt. Geht darum, die Funktion EnumDisplaySettings aus user32.dll anzusprechen. Kompiliert wird das Teil auch einwandfrei, nur schmiert es gleich nach dem Start ab.
Wenn man den Zeiger auf die Funktion definiert (außerhalb jeglicher Funktion), wie definiert man dort einen Zeiger auf einer Struktur??
Quellen, wo ich schon mal rumgesucht habe:
http://msdn2.microsoft.com/en-us/library/ms533265.aspx
http://www.microsoft.com/germany/msdn/library/visualtools/vb6/BildschirmeinstellungenErmittelnUndAendern.mspx?mfr=true
DllInit()
EnumDisplaySettings("", 1)
FUNCTION WeNeedOne:
ENDFUNCTION
// In __GLBASIC__ namespace, outside of functions make a pointer to a function
// im __GLBASIC__ namespace, ausserhalb von Funktionen einen Zeiger auf eine Funktion machen
INLINE
//int (__stdcall *WinMessy)(void*, const char*, const char*, int)=0L;
int (__stdcall *GetResolution)(const char*, long, void*)=0L;
ENDINLINE
// Load DLL and get Pointer to function
// DLL laden und Zeiger auf Funktion holen
FUNCTION DllInit:
INLINE
// DLLCALL(dll_name, fkt_name, void** pFunktionInDll)
DLLCALL("user32.dll", "EnumDisplaySettings", (void**)&GetResolution);
ENDINLINE
ENDFUNCTION
FUNCTION EnumDisplaySettings: disp$, num
LOCAL scrwidth, scrheight
INLINE
struct DEVMODE {
char dmDeviceName[32];
int dmSpecVersion;
int dmDriverVersion;
int dmSize;
int dmDriverExtra;
long dmFields;
int dmOrientation;
int dmPaperSize;
int dmPaperLength;
int dmPaperWidth;
int dmScale;
int dmCopies;
int dmDefaultSource;
int dmPrintQuality;
int dmColor;
int dmDuplex;
int dmYResolution;
int dmTTOption;
int dmCollate;
char dmFormName[32];
int dmUnusedPadding;
long dmBitsPerPel;
long dmPelsWidth;
long dmPelsHeight;
long dmDisplayFlags;
long dmDisplayFrequency;
};
DEVMODE devmode;
devmode.dmSize = sizeof(DEVMODE);
GetResolution(disp_Str.c_str(), num, &devmode);
scrwidth = devmode.dmPelsWidth;
scrheight = devmode.dmPelsHeight;
ENDINLINE
PRINT scrwidth, 0, 0
PRINT scrheight, 0, 20
SHOWSCREEN
ENDFUNCTION
Fixed code:
EnumDisplaySettings("", 0)
KEYWAIT
FUNCTION WeNeedOne:
ENDFUNCTION
// In __GLBASIC__ namespace, outside of functions make a pointer to a function
INLINE
// * NEU *
DECLARE_ALIAS( user32_EnumDisplaySettings, "user32.dll", \
"EnumDisplaySettingsA", (const char*, unsigned int, void*), \
int);
ENDINLINE
FUNCTION EnumDisplaySettings: disp$, num
LOCAL scrwidth, scrheight
INLINE
struct DEVMODE {
char dmDeviceName[32];
short dmSpecVersion;
short dmDriverVersion;
short dmSize;
short dmDriverExtra;
long dmFields;
short dmOrientation;
short dmPaperSize;
short dmPaperLength;
short dmPaperWidth;
short dmScale;
short dmCopies;
short dmDefaultSource;
short dmPrintQuality;
short dmColor;
short dmDuplex;
short dmYResolution;
short dmTTOption;
short dmCollate;
char dmFormName[32];
short dmUnusedPadding;
long dmBitsPerPel;
long dmPelsWidth;
long dmPelsHeight;
long dmDisplayFlags;
long dmDisplayFrequency;
};
DEVMODE devmode;
devmode.dmSize = sizeof(DEVMODE);
// * NEU *
// if disp$ = "", pass NULL instead!
user32_EnumDisplaySettings(LEN(disp_Str) ? disp_Str.c_str() : NULL, num, &devmode);
scrwidth = devmode.dmPelsWidth;
scrheight = devmode.dmPelsHeight;
ENDINLINE
PRINT scrwidth, 0, 0
PRINT scrheight, 0, 20
SHOWSCREEN
ENDFUNCTION
Genial, das funktioniert. Demnächst dann eine Funktion, die alle möglichen Auslösungen zurückliefert. Muss noch ein wenig in MSN wühlen. Hab da irgendwo gelesen, daß man nicht alle Funktionen nutzen kann, die zurückgeliefert werden.