XS is just a wrapper around C code to automate the generation of the C code by the automatic addition of boilerplate etc. In a standard XS distribution directory, typing 'make' will generate a foo.c file from the foo.xs file. Seeing how your code gets converted into C will give you a good idea of what's happening or where you're going wrong. If you don't understand how to handle the struct within C code then you've got a bigger problem.