0x71002A95 处的未处理异常 (SDL2_ttf.dll)
Unhandled exception at 0x71002A95 (SDL2_ttf.dll)
我一直在使用 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、字体和其他文件。
int TTF_Init()
Initialize the truetype font API. This must be called
before using other functions in this library, except TTF_WasInit. SDL
does not have to be initialized before this call.
在声明字体变量时,您在调用 TTF_Init
之前调用了 TTF_OpenFont
。相反,你应该这样做:
TTF_Font* fuente = NULL;
int main()
{
TTF_Init();
fuente = TTF_OpenFont("arial.ttf", 20);
...
}
我一直在使用 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、字体和其他文件。
int TTF_Init()
Initialize the truetype font API. This must be called before using other functions in this library, except TTF_WasInit. SDL does not have to be initialized before this call.
在声明字体变量时,您在调用 TTF_Init
之前调用了 TTF_OpenFont
。相反,你应该这样做:
TTF_Font* fuente = NULL;
int main()
{
TTF_Init();
fuente = TTF_OpenFont("arial.ttf", 20);
...
}