gpt4 book ai didi

dmd 和 gdc 编译代码不同?

转载 作者:行者123 更新时间:2023-12-05 00:25:06 27 4
gpt4 key购买 nike

我目前正在试用DerelictSDL2 (绑定(bind)到 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.ptrchar*指向要加载的图像的名称。但是使用 gdc 编译时,IMG_LoadIMG_LoadTexture两者都返回 null ,而使用 dmd 他们返回一个指向新创建的纹理的指针......

我是否忘记了其他事情(毕竟,使用 dmd 即使没有 IMG_Init 也可以工作)? Derelict 是否仅适用于 dmd(即使它仅与 C 函数接口(interface))?

dmd:2.065

全局数据中心:4.9.1

编辑:

原来问题完全不同。 IMG_LoadTexture它的第二个参数需要一个指向数据的指针,但是 name.ptr似乎只适用于 dmd。但是,如果我尝试使用这样的硬编码参数:
IMG_LoadTexture(renderer, "../test/res/image.jpg")
它适用于 dmd 和 gdc。

最佳答案

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

p.s.请注意字符串文字 0 终止,这就是硬编码参数起作用的原因。

关于dmd 和 gdc 编译代码不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24997268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com