将SDL_ttf与SDL和SDL2一起使用时的C ++访问冲突

时间:2016-07-06 11:51:21

标签: c++ visual-c++ sdl access-violation sdl-ttf

我正在使用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 ++不能很好地相处。

我现在已经工作了大约八个小时了,我的想法已经用完了,试图解决这个问题。有没有人对此有任何想法?

1 个答案:

答案 0 :(得分:3)

SDL和SDL2不兼容。 你有一个或另一个。

如评论中所述,修复方法是使用SDL2_ttf。