Problem Passing Struct to C

Mike Parker aldacron at gmail.com
Fri May 6 02:56:17 PDT 2011


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.



More information about the Digitalmars-d-learn mailing list