繁体   English   中英

dmd和gdc编译代码有何不同?

[英]dmd and gdc compiling code differently?

我目前正在尝试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时,它们会返回指向新创建的纹理的指针...

我忘记了别的东西(毕竟,使用dmd它甚至没有IMG_Init也能工作)? Derelict是否仅适用于dmd(即使它只与C函数接口)?

dmd:2.065

gdc:4.9.1

编辑:

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

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

它适用于dmd和gdc。

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

ps请注意字符串文字是以 0结尾的,这就是硬编码参数有效的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM