On Monday, 13 May 2019 at 09:24:34 UTC, Doug Clayton wrote:
Hi All,
First time poster :)
I'm working on getting a binding to Vulkan working properly in
D, but I've run into a roadblock. The good news is that the
binding seems to work fine, but I'm having an issue getting a
parameter that needs an input of a const(char*)* to receive all
of the members of the array. It only will receive the first
member.
I've looked through the documentation, but I haven't seen a
clear way to cast a char*[] to a char** without it losing the
rest of the members. Can anyone help?
You don't need to cast it, arrays have .ptr property to get
pointer to first element, and in @safe you just &arr[0] instead,
or so I think.
If you are using static/literal arrays and know what you are
doing this will work.
Otherwise it safer to just use regular string[] array and use
something like that
const(char*)* toCStringList(string[] arr)
{
import std.string; // toStringz() - adds null terminator,
allocates using GC if necessary
import std.array; // array() - eagerly converts range to
array, allocates using GC
import std.algorithm; // map() - apply function to range
return arr
.map!(toStringz)
.array();
}