How would the equivalent C type be in D?

rempas rempas at tutanota.com
Wed Mar 1 08:12:05 UTC 2023


I'm looking into 
[this](https://www.x.org/releases/X11R7.7/doc/libxcb/tutorial/index.html) tutorial to learn XCB and I'm trying to write the code in D with betterC. In the section 9.1 (sorry, I cannot give a section link, the article does not give us this ability), I'm facing a problem and my program exits with the exit code: "-11". I suspect that this happens because I haven't translated the following code the right way:

```d
uint32_t value[1];
value[0] = screen.black_pixel;
xcb_create_gc(connection, black, win, mask, value);
```

I originally tried to translate this as:

```d
uint[1] value;
value[0] = screen.black_pixel;
xcb_create_gc(connection, black, win, mask, value);
```

But then, when I tried to compile the program, I got the 
following error:

```
Error: function `headers.xcb_create_gc(xcb_connection_t* c, uint 
cid, uint drawable, uint value_mask, const(void)* value_list)` is 
not callable using argument types `(xcb_connection_t*, uint, 
uint, uint, uint[1])`
src/draw.d(18,16):        cannot pass argument `value` of type 
`uint[1]` to parameter `const(void)* value_list`
```

So I thought of doing the following:

```d
uint* value;
value[0] = screen.black_pixel;
xcb_create_gc(connection, black, win, mask, value);
```

Now the program complies but I get the "-11" exit code. Another 
thing I thought (which is probably the same thing under the hood 
but done a different way):

```d
const(void)* value;
(cast(ubyte*)value)[0] = screen.black_pixel;
xcb_create_gc(connection, black, win, mask, value);
```

Same results. Any ideas?



More information about the Digitalmars-d-learn mailing list