SDL im Borland C++Builder6 verwenden
-
Ich verwende recht gerne den C++Builder6, um zu programmieren, doch als ich heute versucht habe meine erste SDL-Anwendung zu schreiben funktionierte irgendwie garnichts. Wie richtet man die SDL in BCB ein, damit es funktioniert?
Ich hab schon einige Tutorials durchsucht, doch dort ist nie vom BCB die Rede.
Geht das überhaupt? Kann mir das mal jemand erklären?Schon mal danke im voraus.
P.S.: Folgenden Code habe ich verwendet, aber ich kann kein Bild sehen.
#include <stdlib.h> #include <stdio.h> #include "SDL.h" #ifdef _WIN32 #undef main #endif int main(int argc, char *argv[], char *env[]) { SDL_Surface *screen, *bitmap; int running; if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "SDL konnte nicht initialisiert werden: %s\n", SDL_GetError()); exit(1); } atexit(SDL_Quit); screen = SDL_SetVideoMode(640, 30, 0, 0); if (!screen) { fprintf(stderr, "Konnte Bildschirmmodus nicht setzen: %s\n", SDL_GetError()); exit(1); } bitmap = SDL_LoadBMP("bild.bmp"); if (!bitmap) { fprintf(stderr, "Bitmap konnte nicht geladen werden: %s\n", SDL_GetError()); exit(1); } SDL_BlitSurface(bitmap, 0, screen, 0); SDL_UpdateRect(screen, 0, 0, 0, 0); running = 1; while(running) { SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: running = 0; break; case SDL_QUIT: running = 0; break; } } } SDL_FreeSurface(bitmap); return 0; }
-
kommt mir äusserst spanisch vor:
screen = SDL_SetVideoMode(640, 30, 0, 0);
probier doch mal:
screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
-
mir kommt schon
int main(int argc, char *argv[], char *env[])
spanisch vor, besonders da SDL ja noch nichtmal ein
int main() // keine Argumente
akzeptiert... .
gibts denn irgendwelche Fehlermeldungen? (SDL legt normalerweise auch immer eine stderr.txt und eine stdout.txt an, vielleicht steht da was drin)
-
int main(int argc, char *argv[], char *env[])
Ist das env (für Umgebungsvariablen) nicht Microsoft-spezifisch??
-
was muss ich dann für eine main()-Routine verwenden.
Bei mir kommt keine Fehlermeldung, aber es zeigt trotzdem nichts an.
-
Sgt. Nukem schrieb:
int main(int argc, char *argv[], char *env[])
Ist das env (für Umgebungsvariablen) nicht Microsoft-spezifisch??
Nein gibts z.B. auch auf unices.
-
@El Barto:
1. wenn der compiler nicht über dein main(...) meckert, sollte es auch gehen.
2. wie gesagt, sagen die stdout/stderr was ?
3. hast du meine alternative zu SDL_SetVideoMode(640, 30, 0, 0) probiert?falls nötig zur erklärung:
SDL_SetVideoMode ist ja klar
(640, 30, 0, 0) = fenster ist 640 pixel hoch, 30 pixel breit (häh, wasn das fürn fenster???) und 0 bit farbtiefe (stelle ich mir schwierig vor, denn 1 bit = schwarz-weiss, 8 bit = 256 farben etc... also warum 0 bit? geht doch gar nicht. wäre sozusagen ein NUL output driver)
und die letzte stelle sollte IMO die art der bufferung etc enthalten, z.b. SDL_SWSURFACE (system memory buffer), SDL_HWSURFACE (graka-buffer) und anderes...also, ersetze einfach mal testweise
screen = SDL_SetVideoMode(640, 30, 0, 0);
mit
screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
und erzähl dann wasses macht.
-
also, irgendwie komm ich nicht weiter.
ich hab doch schon directX programmiert, da kann doch sdl kein problem sein.Jetzt kommt die ganze zeit ein linker fehler:
sdl.lib contains invalid OMF record
häää?Frage:
Arbeitet jemand von euch mit der sdl und dem bcb?
könnte er mir mal ein fertiges Projekt per mail senden, dass ich mal ein beispiel habe.meine e-mail-adresse: elbarto.mail@web.de
-
El Barto schrieb:
also, irgendwie komm ich nicht weiter.
ich hab doch schon directX programmiert, da kann doch sdl kein problem sein.Jetzt kommt die ganze zeit ein linker fehler:
sdl.lib contains invalid OMF record
häää?Frage:
Arbeitet jemand von euch mit der sdl und dem bcb?
könnte er mir mal ein fertiges Projekt per mail senden, dass ich mal ein beispiel habe.meine e-mail-adresse: elbarto.mail@web.de
Das sieht mir schwer nach dem gleichen Problem aus, daß auch DirectX hat:
Die Microsoft LIBs / DLLs sind inkompatibel mit dem Borland Format (COFF / OMF)
-
ja, toll.
Für DirectX hab ich extra lib und dll Dateien für den Borland C++Builder gefunden, dass muss es doch für die sdl-Bibliotek auch geben, oder?
-
es bleibt immer noch die Option, dir den Quellcode von www.libsdl.org runterzuladen und ihn mit dem BCB selbst zu kompilieren. Ist auch nicht allzu schwer
-
Oder Du benutzt reimp von Borland...
-
also, ich hab mir jetzt das ganze SDL-SDK runtergeladen und hab dort gesehen,
dass es ja schon compilierte Libs für Borland enthält.Dennoch bekomm ich immer, wenn ich "sdl.h" include einen Fehler:
unresolved external '_main' referenced from...an was kann das liegen?
-
Daß Du keine Konsolen- sondern eine Windows-Anwendung erstellt hast...
-
nein, an dem liegts nicht, ich hab ne konsolen-anwendung mit dem konsolen-experten erstellt.
-
El Barto schrieb:
nein, an dem liegts nicht, ich hab ne konsolen-anwendung mit dem konsolen-experten erstellt.
Äh, und vice versa?!?!
Notfalls:
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int); int main(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){ WinMain(hInstance,hPrevInstance,lpCmdLine,nShowCmd); return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){ // ... return 0; }
-
El Barto schrieb:
ich hab ne konsolen-anwendung mit dem konsolen-experten erstellt.
Ich streite alles ab. Ich habe damit nichts zu tun!
Bye, TGGC \-/
-
El Barto schrieb:
Dennoch bekomm ich immer, wenn ich "sdl.h" include einen Fehler:
unresolved external '_main' referenced from...Das ist ein allgemeines Problem mit Borland in Verbindung mit SDL...
Schreib mal das an den Anfang von deiner Quelltextdatei und sag mal, ob's geholfen hat#ifdef main #undef main #endif
MfG Aoeke
-
nein, das hat leider nichts gebracht. der fehler kommt immer noch.
Ich glaub ich gebs jetzt dann auf und programmier in VisualC++.
Kann mir denn keiner ein Beispiel-Project vom C++Builder mit der SDL schicken,
das funktioniert?
-
El Barto schrieb:
also, ich hab mir jetzt das ganze SDL-SDK runtergeladen und hab dort gesehen,
dass es ja schon compilierte Libs für Borland enthält.Dennoch bekomm ich immer, wenn ich "sdl.h" include einen Fehler:
unresolved external '_main' referenced from...an was kann das liegen?
wie bereits weiter oben gesagt:
ich kenn genau den Fehler im Zusammenhang mit einer "falschen" main()...
die Main-Deklaration muss
int main (int argc, char** argv) // kein char** env
sein, sonst wirds nicht gehen! (wenn du das beruecksichtigt hast, kann ich dir auch nicht weiterhelfen
).
-
Hier ist der Quelltext von 'nem einfachen Projekt, in dem nur ein SDL-Fenster erstellt wird... Dann dazu halt noch die richtigen Lib's und fertig...
~> http://www.aoeketec.de/uploads/main.cpp
MfG Aoeke