我正在使用SDL2_ttf和SDL2(在Visual Studio 2015中)。当我尝试运行以下代码时,
#include "SDL.h"
#include "SDL_ttf.h"
int main(int argc, char* args[]) {
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
SDL_Window* window;
SDL_Renderer* renderer;
SDL_CreateWindowAndRenderer(1600, 900, SDL_WINDOW_OPENGL, &window, &renderer);
TTF_Font* font = TTF_OpenFont("comic.ttf", 12);
SDL_Color color = { 0, 0, 0, 255 };
SDL_Surface* textSurface = TTF_RenderText_Solid(font, "asdf", color);
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, textSurface);
TTF_Quit();
SDL_Quit();
return 0;
}
我收到了“SDL.dll缺失”运行时错误。我把SDL.dll,SDL2.dll,libfreetype-6.dll,SDL_ttf.dll,zlib1.dll和其他库放在我的system32文件夹中,这解决了运行时错误,但我立即遇到了另一个错误:“未处理的异常在MCP2016.exe中的0x000000006C812E39(SDL2.dll):0xC0000005:访问冲突读取位置0x000000010000006A。“
当我在Visual Studio对话框中决定“Break”告诉我这个时,它指向了
行 SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, textSurface);
我遇到了一个old forum post,它表明SDL_ttf和SDL2会导致这样的访问冲突,因为它们不完全兼容。我认为这必须解决我遇到的问题,因为它首先抱怨SDL.dll。有人建议用SDL2头文件重新编译DLL,但我担心这超出了我的能力,特别是因为Windows和C ++不能很好地相处。
我现在已经工作了大约八个小时了,我的想法已经用完了,试图解决这个问题。有没有人对此有任何想法?
答案 0 :(得分:3)
SDL和SDL2不兼容。 你有一个或另一个。
如评论中所述,修复方法是使用SDL2_ttf。