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