0x71002A95处的未处理异常(SDL2_ttf.dll)

时间:2015-03-19 00:53:29

标签: c++ sdl-2 true-type-fonts unhandled-exception

我一直在使用SDL2库在C ++中编写一些基本代码。它运行得很完美,但我需要在屏幕上打印一些文本,为此,我必须下载SDL2 TTF库。我就像使用SDL2一样安装它。我试着简单地打印一个单词,但是一旦我编译了代码,Visual Studio就会说:

Unhandled exception at 0x71002A95 (SDL2_ttf.dll) in nuevo proyecto.exe: 
0xC0000005: Access violation reading location 0x00000000.

程序只是不起作用,它被冻结在一个白色的屏幕上(在我尝试使用TTF库之前没有任何问题)。我能做什么?提前致谢。这是我的代码:

#include "stdafx.h"
#include <SDL.h>
#include <SDL_ttf.h>
#include <string>

SDL_Window * ventana;
SDL_Surface * superficie;
SDL_Surface * alpha;
SDL_Surface * renderizar;
SDL_Surface * texto;
bool inicia = false, cierra=false;
SDL_Point mouse;
TTF_Font *fuente = TTF_OpenFont("arial.ttf", 20);
char* palabras="hola";
SDL_Color color = { 0, 0, 0, 0 };

int controles(){
    SDL_GetMouseState(&mouse.x,&mouse.y);
    return 0;
}

int graficos(char *archivo){ //la primera vez inicia ventana
    //el argumento es el nombre del bmp a renderizar
    if (inicia == false){ ventana = SDL_CreateWindow("ventana", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0); } //abre ventana solo una vez
    inicia = true; // no permite que se abra mas de una vez la ventana
    superficie = SDL_GetWindowSurface(ventana);
    alpha = SDL_LoadBMP("alpha.bmp");
    texto = TTF_RenderText_Solid(fuente, palabras, color);
    renderizar = SDL_LoadBMP(archivo);
    SDL_Rect rectangulo = { 0, 0, 640, 480 };
    SDL_Rect rrenderizar = { mouse.x, mouse.y, 4, 4 };
    SDL_Rect rtexto = { 0, 0, 60, 60 };
    SDL_BlitSurface(alpha, NULL, superficie, &rectangulo);
    SDL_BlitSurface(renderizar, NULL, superficie, &rrenderizar);
    SDL_BlitSurface(texto, NULL, superficie, &rtexto);
    SDL_UpdateWindowSurface(ventana);
    return 0;
}   

int main(int argc, char **argv)
{
    TTF_Init();
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Event evento;
    while (!cierra){
        SDL_PollEvent(&evento);
        switch (evento.type){
        case SDL_QUIT:cierra = true; break;
        }
        //programa aqui abajo
        controles();
        graficos("hw.bmp");
    }
    TTF_Quit();
    SDL_Quit();
    return 0;
}

PS:我在Debug文件夹中有DLL,字体和其他文件。

1 个答案:

答案 0 :(得分:1)

根据SDL_TTF Documentation

int TTF_Init()
     

初始化truetype字体API。 必须调用它   在使用此库中的其他函数之前,TTF_WasInit除外。 SDL   在此次通话之前不必初始化。

在声明字体变量时,在调用TTF_OpenFont之前调用TTF_Init。相反,你应该这样做:

TTF_Font* fuente = NULL;    
int main()
{
    TTF_Init();
    fuente = TTF_OpenFont("arial.ttf", 20);
    ...
}