Premiers essais SDL

Philippe49Philippe49 Membre
00:45 modifié dans Xcode et Developer Tools #1
Après récupération du SDLFramework, et de l'hôte Cocoa devel-lite, j'ai réalisé la compilation d'un essai de la bibliothèque. Cela peut se faire en ligne de commande ainsi :
gcc -I/Library/Frameworks/SDL.framework/Headers essaiSdl.c    SDLMain.m  -framework SDL -framework Cocoa  -o pgm

Ma question :
Le SDLMain.m crée une application Cocoa avec fenêtre qui reçoit les instructions graphiques de essaiSDL.c
Mais comment est créé ce lien entre ces deux exécutables. J'ai du mal à  le percevoir dans le code SDLMain ?
Le fait de les compiler sur la même ligne de commande ? 

Réponses

  • AliGatorAliGator Membre, Modérateur
    00:45 modifié #2
    Ben heu oui c'est comme quand tu as plusieurs fichiers .m  (et .h)  dans un projet Xcode, ces plusieurs .m sont compilés ensemble dans un seul exécutable. Sous le capot, c'est juste que les fichiers .m sont tous passés ensemble dans la même ligne de commande à  gcc...
  • Philippe49Philippe49 Membre
    00:45 modifié #3
    Au niveau ligne de compilation, je vois. Au niveau exécution, que se passe-t-il :
    SDLMain.m crée une appli Cocoa avec menu, et boucle d'événements, c'est assez clair.
    mais SDLMain.m et mon essaiSdl.c définissent tous les deux un main() : qui fait quoi ? Est-ce un système de process père/fils qui s'installe comme le fait un shell ? [size=8pt](1)[/size]
    Je crois que là  ma culture informatique a besoin d'être complétée !

    [size=8pt](1)[/size]
    Dans SDLMain, on trouve
    extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
    extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
    extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);

    main() de SDLMain appelle CustomApplicationMain()
    static void CustomApplicationMain (int argc, char **argv)<br />{<br />&nbsp; &nbsp; NSAutoreleasePool	*pool = [[NSAutoreleasePool alloc] init];<br />&nbsp; &nbsp; SDLMain				*sdlMain;<br /><br />&nbsp; &nbsp; /* Ensure the application object is initialised */<br />&nbsp; &nbsp; [SDLApplication sharedApplication];<br />&nbsp; &nbsp; <br />#ifdef SDL_USE_CPS<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; CPSProcessSerNum PSN;<br />&nbsp; &nbsp; &nbsp; &nbsp; /* Tell the dock about us */<br />&nbsp; &nbsp; &nbsp; &nbsp; if (!CPSGetCurrentProcess(&amp;PSN))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!CPSEnableForegroundOperation(&amp;PSN,0x03,0x3C,0x2C,0x1103))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!CPSSetFrontProcess(&amp;PSN))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [SDLApplication sharedApplication];<br />&nbsp; &nbsp; }<br />#endif /* SDL_USE_CPS */<br /><br />&nbsp; &nbsp; /* Set up the menubar */<br />&nbsp; &nbsp; [NSApp setMainMenu:[[NSMenu alloc] init]];<br />&nbsp; &nbsp; setApplicationMenu();<br />&nbsp; &nbsp; setupWindowMenu();<br /><br />&nbsp; &nbsp; /* Create SDLMain and make it the app delegate */<br />&nbsp; &nbsp; sdlMain = [[SDLMain alloc] init];<br />&nbsp; &nbsp; [NSApp setDelegate:sdlMain];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; /* Start the main event loop */<br />&nbsp; &nbsp; [NSApp run];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; [sdlMain release];<br />&nbsp; &nbsp; [pool release];<br />}
    


  • Philippe49Philippe49 Membre
    juin 2008 modifié #4
    C'est tout bête : Réponse


    #define  main SDL_main
Connectez-vous ou Inscrivez-vous pour répondre.