dmd和gdc编译代码的方式不同?

dmd和gdc编译代码的方式不同?,d,sdl-2,dmd,gdc,derelict3,D,Sdl 2,Dmd,Gdc,Derelict3,我目前正在尝试(与SDL2库的绑定,用于D),我已经编写了一段代码,成功地加载了JPG图像并将其显示在窗口中。也就是说,当使用dmd编译时。当我尝试使用gdc(并且没有代码修改)时,它会编译,但不会在运行时加载映像 我相信我做得对: SDL\u Init(SDL\u Init\u视频) 然后 IMG\u Init(IMG\u Init\u JPG) 在那之后的某个地方 this.data=IMG\u LoadTexture(Window.renderer,name.ptr) 其中Window.r

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

我相信我做得对:

SDL\u Init(SDL\u Init\u视频)

然后

IMG\u Init(IMG\u Init\u JPG)

在那之后的某个地方

this.data=IMG\u LoadTexture(Window.renderer,name.ptr)

其中
Window.renderer
显然是
SDL\u renderer*
name.ptr
是指向要加载的图像名称的
char*
。但是当使用gdc编译时,
IMG\u Load
IMG\u LoadTexture
都返回
null
,而使用dmd则返回指向新创建纹理的指针

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

dmd:2.065

gdc:4.9.1

编辑:

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

IMG\u加载纹理(渲染器,“../test/res/image.jpg”)


它同时适用于dmd和gdc。

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


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

如果您提供一个完整的最小示例,以便读者可以检查他们在本地得到的内容,这会有所帮助。既然您问到了这一点,我有一个代码可以与这两个编译器一起工作。。。但我看不出我对长的那个做了什么错事;我甚至复制了长的一部分来制作短的一个!是的,谢谢!太谢谢你了!我想我自己不会发现的。再次感谢!