dmd和gdc编译代码的方式不同?
我目前正在尝试(与SDL2库的绑定,用于D),我已经编写了一段代码,成功地加载了JPG图像并将其显示在窗口中。也就是说,当使用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
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结尾,这就是硬编码参数工作的原因。如果您提供一个完整的最小示例,以便读者可以检查他们在本地得到的内容,这会有所帮助。既然您问到了这一点,我有一个代码可以与这两个编译器一起工作。。。但我看不出我对长的那个做了什么错事;我甚至复制了长的一部分来制作短的一个!是的,谢谢!太谢谢你了!我想我自己不会发现的。再次感谢!