On 2011-05-06 11:56, Mike Parker wrote:
Testing out a new binding I knocked up for a C library. One of the
functions takes a struct by value. It looks somewhat like this:

struct S {}
struct Color
{
float r,g,b,a;
}

extern C void function(S* s, Color color, int x, int y, in char*)
draw_text;

Now, there is another function that adjusts color values when making a
color. In C, it is sometimes used like so:

draw_text(s, map_color(255, 0, 0, 0), 0, 0, "Blarg");

When I'm calling draw_text like this on the D side, my text output is
corrupt. I keep getting weird things like ^^P^, but in the appropriate
color. It's consistent, no matter what string I pass, but is different
for each color value. If I call draw_text like this:

auto color = map_color(...);
draw_text(s, color, 0, 0, "Blarg");

It works as expected. Has anyone else seen this, or know of a
workaround? I'm going to dig through bugzilla later on and see if it's
been reported already, but I'm curious if anyone knows of the cause off
hand.

You need to convert the string into a C string;

import std.string;
auto color = map_color(...);
draw_text(s, color, 0, 0, "Blarg".toStringz);

--
/Jacob Carlborg

Reply via email to