我目前正在试用DerelictSDL2 (一个绑定到SDL2库的D),我编写了一段代码,成功地加载了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_Load和IMG_LoadTexture都返回null,而使用dmd则返回指向新创建的纹理的指针.
我是不是忘记了其他的东西(毕竟,对于dmd,即使没有IMG_Init,它也起作用了)?遗弃仅适用于dmd (即使它只是与C函数的接口)吗?
dmd : 2.065
gdc : 4.9.1
编辑:
结果发现问题完全不同。IMG_LoadTexture的第二个参数是指向数据的指针,但是name.ptr似乎只适用于dmd。然而,如果我尝试使用这样的硬编码论点:
IMG_LoadTexture(renderer, "../test/res/image.jpg")
它与dmd和gdc一起工作。
发布于 2014-07-28 15:29:28
不能保证D字符串将以0结尾.它只是偶然发生与dmd。正确的方法是从toStringz模块中使用std.string ()函数。
附注:请注意字符串文本是以0结尾的,这就是硬编码参数工作的原因。
https://stackoverflow.com/questions/24997268
复制相似问题