Je suis les tutoriels SDL2.0 de LazyFoo, en utilisant Code :: Blocks 13.12. Je n’ai eu aucun mal à faire en sorte que SDL2 soit lié et fonctionne dans VS2010, mais j’ai changé IDE et tombe sur cette erreur:
winapifamily.h: Aucun fichier ou répertoire de ce type
Je pense que tout est lié correctement. J'ai indiqué le programme à mes répertoires SDL2 include et lib.
Buildlog: (une erreur survient dans le fichier: ..\include\SDL2\SDL_platform.h)
=== Construire: Déboguer dans SDL2_Setup (compilateur: GNU Compilateur GCC) ===
erreur fatale: winapifamily.h: aucun fichier ou répertoire de ce type
=== Échec de la construction: 1 erreur (s), 0 avertissement (s) (0 minute (s), 0 seconde (s)) ===
C'est la première fois que je pose une question ici. J'ai consulté Google pour obtenir une réponse et faire une recherche parmi les questions/réponses existantes, mais je n'ai pas pu résoudre le problème. Voici mon code aussi.
Mon code:
// Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>
// Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main( int argc, char* args[] )
{
// The window we'll be rendering to
SDL_Window* window = NULL;
// The surface contained by the window
SDL_Surface* screenSurface = NULL;
// Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO) < 0 )
{
printf( "SDL could not initialize! SDL_GetError: %s\n", SDL_GetError() );
}
else
{
// Create window
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if( window == NULL )
{
printf( "Window could not be created! SDL_GetError: %s\n", SDL_GetError() );
}
else
{
// Get window surface
screenSurface = SDL_GetWindowSurface( window );
// Fill the surface white
SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF));
// Update the surface
SDL_UpdateWindowSurface( window );
// Wait two seconds
SDL_Delay( 2000 );
}
}
// Destroy window
SDL_DestroyWindow( window );
// Quit SDL subsystems
SDL_Quit();
return 0;
}
[~ # ~] mise à jour [~ # ~] : SDL 2.0.4 est maintenant disponible, inclut un correctif pour ce bogue et est disponible au téléchargement. à http://libsdl.org/download-2.0.php
C'est un bogue dans SDL 2.0.3. Un correctif a été validé pour la prochaine version de SDL. En attendant, voici un lien vers la copie fixe de SDL_platform.h:
https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h
Si vous déposez le fichier dans le répertoire include\SDL2\de SDL 2.0.3 en écrasant l'original, vos applications devraient être compilées correctement.
La solution rapide. Mettez les lignes de commentaire 121 à 132 inclusivement dans SDL_platform.h. Le fichier est chargé dans C :: B lorsque l'erreur se produit. Enregistrez-le et construisez-le!
J'ai eu ce problème. Aller à
C:\Program Files (x86)\Windows Kits\8.0\Include\shared
et trouve winapifamily.h
, puis copiez-le dans votre
..\Mingw\Include\ folder
Edit: Je pense avoir des fichiers de kits Windows à cause de Visual Studio 2012 ou version ultérieure, désolé. Je suis heureux que vous ayez pu résoudre votre problème.
Oui, le problème est dans cet en-tête (lignes 117 à 134 dans SDL_plataform.h version SDL 2.0.3):
#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
/* Try to find out if we're compiling for WinRT or non-WinRT */
/* If _USING_V110_SDK71_ is defined it means we are using the v110_xp or v120_xp toolset. */
#if defined(__MINGW32__) || (defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_) /* _MSC_VER==1700 for MSVC 2012 */
#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#undef __WINDOWS__
#define __WINDOWS__ 1
/* See if we're compiling for WinRT: */
#Elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
#undef __WINRT__
#define __WINRT__ 1
#endif
#else
#undef __WINDOWS__
#define __WINDOWS__ 1
#endif /* _MSC_VER < 1700 */
#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */