May 06, 2011
On 5/6/11, Jacob Carlborg <doob@me.com> wrote:
> 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.
>>
>
> Don't know if it has anything to do with the problem but you have to watch out with the floats, they are initialized to NaN.
>
> --
> /Jacob Carlborg
>

And char arrays are initialized to 0xFF, which could be another source of problems.
May 08, 2011
On 2011-05-06 21:05, Robert Clipsham wrote:
> On 06/05/2011 19:40, Jacob Carlborg wrote:
>>> No, D implicitly casts string literals to zero-terminated const(char)*.
>>> That part is fine.
>>>
>>> -Steve
>>
>> Since when?
>
> Since const was introduced, before then they implicitly casted to char*
> instead. And that has been the case since early D1.

I think I've heard of it but I thought that was before D1 and had been remove.

-- 
/Jacob Carlborg
1 2
Next ›   Last »