raylib LoadTexture Mismatch between
    Steven Schveighoffer 
    schveiguy at gmail.com
       
    Fri Feb 19 23:29:18 UTC 2021
    
    
  
On 2/19/21 5:26 PM, Decabytes wrote:
> Dlang and curly brace language noob here. I'm trying to work with the 
> raylib-d library. I downloaded raylib-d using dub, and I installed 
> raylib with my package manager on Manjaro.  I'm getting a mismatch in 
> the arguments I'm passing to LoadTexture.
> 
> source/app.d(7,32): Error: function raylib.LoadTexture(const(char)* 
> fileName) is not callable using argument types (string)
> 
> In the raylib-d docs/cheatsheet it says LoadTexture uses a string as an 
> argument.The original raylib docs/cheatsheet says it's a const(char)* 
> value. So it seems I'm using the C version instead of the D version? The 
> relevant section of the code below is
> 
> import raylib;
> 
> void main()
> {
>      InitWindow(800, 600, "Hello, Raylib-D!");
>      string fname = "assets/tile_022.png";
>      Texture2D player = LoadTexture(fname);
raylib-d does not have D wrappers for everything. You are supposed to 
use the C functions.
D's string literals are null-terminated. However, the language only 
allows actual literals to be implicitly converted to immutable(char)* as 
literals, not as general strings.
So this will work:
Texture2D player = LoadTexture("assets/tile_022.png");
And this will work too (because string literals are null terminated):
string fname = "assets/tile_022.png";
Texture2D player = LoadTexture(fname.ptr);
If you have a string that you aren't sure is a string literal, you can 
use std.string.toStringz to convert it, but this will allocate another 
string (possibly).
import std.string;
Texture2D player = LoadTexture(fname.toStringz);
-Steve
    
    
More information about the Digitalmars-d-learn
mailing list