[racket-dev] foreign struct access different in 5.1.3?
On Sep 16, 2011, at 3:06 PM, John Clements wrote:
> I'm trying to backport working FFI code to 5.1.3, and I'm having trouble referring to elements of a C struct. Specifically, in the presence of this definition
>
> (define-cstruct _rack-audio-closure
> ([sound _pointer]
> [cur-sample _ulong]
> [num-samples _ulong]
> [stop-now _bool]
> [stop-sema-ptr _pointer]))
>
> using the function (rack-audio-closure-cur-sample) on the result of an FFI call with signature
>
> (_fun _pointer _ulong _pointer -> _rack-audio-closure-pointer)
>
> produces this error:
>
> rack-audio-closure-cur-sample: expected argument of type <struct:rack-audio-closure>; given #<cpointer:rack-audio-closure>
>
> in 5.1.3, but it works just fine in the git head.
More research suggests that the problem is more limited; it looks like a problem of generativity. That is, if I have two modules that declare the "same" cstruct (same name, same fields, same types) then cpointers to these structures returned by functions from the first module cannot be accessed in the other module.
AFAICT, This is not the case in more recent versions; that is, these cstructs are not generative. Assuming this is deliberate, I could document it.
John
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4624 bytes
Desc: not available
URL: <http://lists.racket-lang.org/dev/archive/attachments/20110916/10af614f/attachment.p7s>