D string to C struct fixed-size array

bdh ben.h at posteo.net
Tue Jan 5 03:41:14 UTC 2021


On Monday, 4 January 2021 at 17:24:27 UTC, Steven Schveighoffer 
wrote:
> On 1/3/21 9:17 PM, bdh wrote:
>> On Sunday, 3 January 2021 at 11:16:25 UTC, rikki cattermole 
>> wrote:
>>> Your definition of Image is probably wrong.
>>>
>>> You may have missed a pointer (8 bytes).
>> 
>> [...]
>> 
>
> How to test:
>
> in D-land:
>
> import magickd.core.c.image : Image;
>
> pragma(msg, Image.filename.offsetof);
>
> In C-land
>
> #include <stdio.h>
> #include <magick/image.h>
>
> int main()
> {
>    Image *ptr = NULL;
>    printf("%ld", &(ptr->filename)); // may need a different 
> specifier
> }
>
> If those are not the same, then your struct is off.
>
> -Steve

Thanks for this, I wasn't aware of the .offsetof property (I see 
it's mentioned in the Struct and Unions section of the language 
reference).

As rikki guessed, I had missed something (offset was 480 instead 
of 488).  The issue wasn't with the Image struct itself, but with 
the TimerInfo struct (used for the `timer` member of Image) 
missing a "private" unsigned long.

Thanks again.


More information about the Digitalmars-d-learn mailing list