On Fri, 29 Mar 2019, 09:46 David Pirotte, wrote: > Hi again, > > > ... > > Following your explanation and example, I tried this and thought it > would work > > then, but it also failed: > > > GNU Guile 2.2.4.1-cdb19 > > > Enter `,help' for help. > > scheme@(guile-user)> ,use (system foreign) > > scheme@(guile-user)> (define str-1 "Hello") > > scheme@(guile-user)> (define str-2 "there!") > > scheme@(guile-user)> (make-c-struct (list '* '*) (list > (string->pointer str-1) > > (string->pointer str-2))) $2 = # > > scheme@(guile-user)> (parse-c-struct $2 (list '* '*)) > > $3 = (# #) > > scheme@(guile-user)> (map pointer->string $3) > > $4 = ("" "`\v?\x02?U") > > Here are another couple of examples: > > scheme@(guile-user)> ,use (system foreign) > scheme@(guile-user)> (define str-1 "Hello") > scheme@(guile-user)> (define str-2 "there!") > scheme@(guile-user)> (make-c-struct (list '* '*) (list (string->pointer > str-1) (string->pointer str-2))) > $2 = # > scheme@(guile-user)> (parse-c-struct $2 (list '* '*)) > $3 = (# #) > scheme@(guile-user)> (map pointer->string $3) > $4 = ("Hello" "there!") > > But then: > > scheme@(guile-user)> str-1 > $5 = "Hello" > scheme@(guile-user)> str-2 > $6 = "there!" > scheme@(guile-user)> (map pointer->string $3) > $7 = ("?\\?q\x7f" " ??E?U") > scheme@(guile-user)> (map pointer->string $3) > $8 = ("?\\?q\x7f" " ??E?U") > > I guess that what the GC recollected are the pointers, or even $3, the list > Let's hold on it then: > > scheme@(guile-user)> (define c-struct (make-c-struct (list '* '*) (list > (string->pointer str-1) (string->pointer str-2)))) > scheme@(guile-user)> (parse-c-struct c-struct (list '* '*)) > $9 = (# #) > scheme@(guile-user)> (map pointer->string $9) > $10 = ("\x02" "0??E?U") > > Not good either. Let's hold on the parse-c-struct to then: > > scheme@(guile-user)> (define parsed (parse-c-struct c-struct (list '* > '*))) > scheme@(guile-user)> parsed > $16 = (# #) > scheme@(guile-user)> (map pointer->string $16) > $17 = ("0??E?U" "?\x01?F?U") > scheme@(guile-user)> (map pointer->string parsed) > $18 = ("\x03" "?\x01?F?U") > > Didn't do it either > Ok, let's hold-on to the pointers (which I thought would not be necessary > after > holding-on c-struct and/or parsed): > > scheme@(guile-user)> (define p1 (string->pointer str-1)) > scheme@(guile-user)> (define p2 (string->pointer str-2)) > scheme@(guile-user)> (make-c-struct (list '* '*) (list p1 p2)) > $19 = # > scheme@(guile-user)> (parse-c-struct $19 (list '* '*)) > $20 = (# #) > scheme@(guile-user)> p1 > $21 = # > scheme@(guile-user)> p2 > $22 = # > scheme@(guile-user)> (map pointer->string $20) > $23 = ("Hello" "there!") > > That worked, but I wonder if this is what is expected from us (users)? > Yes, that would seem very odd to me, as I thought that a 'pointer' really was just an address. (Hopefully some more light will be thrown when the maintainers are back around again!) Best wishes, Neil > Cheers, > David >