D - DMD和GDC编译代码不同



我目前正在尝试DerelictSDL2(绑定到D的SDL2库),我已经编写了一个代码,可以成功加载JPG图像并将其显示在窗口中。也就是说,当它被dmd编译时。当我尝试使用gdc(没有代码修改)时,它确实编译,但它不会在运行时加载图像。

我相信我做的是对的:

SDL_Init(SDL_INIT_VIDEO)

然后

IMG_Init(IMG_INIT_JPG)

和后面的

this.data = IMG_LoadTexture(Window.renderer, name.ptr)

其中Window.renderer(显然)是SDL_Renderer*, name.ptr是指向要加载的图像名称的char*。但是当使用gdc编译时,IMG_LoadIMG_LoadTexture都返回null,而使用dmd时,它们返回指向新创建纹理的指针…

我忘了别的东西吗(毕竟,即使没有IMG_Init, dmd也能工作)?是否只与dmd一起工作(即使它只与C函数接口)?

dmd: 2.065

gdc: 4.9.1

编辑:

原来问题是完全不同的。IMG_LoadTexture的第二个参数是指向数据的指针,但name.ptr似乎只适用于dmd。但是,如果我尝试使用这样的硬编码参数:

IMG_LoadTexture(renderer, "../test/res/image.jpg")

不能保证D字符串以0结尾。dmd只是偶然发生的。正确的方法是使用std.string模块中的toStringz()函数。

注。请注意字符串字面值 0结尾,这就是硬编码参数工作的原因。

相关内容

  • 没有找到相关文章

最新更新