On Mon, 04 Jul 2011 10:31:58 -0400, Jonathan Sternberg <jonathansternb...@gmail.com> wrote:

glut has the function:

    void glutInit( int* pargc, char** argv );

In order to use it. Since D has an ABI compatible with C, I should be able to write a D file with extern (C) on the glut functions. How would I wrap this
function to be used with D arrays? Such as:

int main(string[] args)
{
    glutInit( /* I don't know what to do here */ );
    return 0;
}

Thanks.

Convert all the args to zero-terminated strings. One thing to look at, does glutInit actually modify any of the strings or does it just remove them from the argv array? Because I would expect the argv argument to be const(char)** if it doesn't modify. That would allow you to pass in the strings without having to duplicate them.

Some untested code:

auto argarr = new immutable(char)*[args.length];
foreach(i, a; args)
   argarr[i] = (a.dup ~ '\0').ptr;

int argc = argarr.length;
glutInit(&argc, argarr.ptr);

// now, need to refix args to ignore arguments already consumed by glutInit
...

-Steve

Reply via email to