#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include "const-c.inc" /* Your C-Code goes here: */ typedef struct __CStruct { char *name; int num; } CStruct; void setName(CStruct *s, char *n) { if (s != NULL) { if (s->name != NULL) { free(s->name); } s->name = (n != NULL) ? strdup(n) : NULL; } } /* End of C-Code */ MODULE = cstruct PACKAGE = cstruct # XS-Code: CStruct *createStruct(name, num) char* name int num CODE: CStruct *s = (CStruct*) malloc(sizeof(CStruct)); s->name = NULL; setName(s, name); s->num = num; RETVAL = s; OUTPUT: RETVAL void deleteStruct(s) CStruct* s CODE: if (s != NULL) { if (s->name != NULL) { free(s->name); } free(s); } void setName(s, name) CStruct* s char* name char* getName(s) CStruct* s CODE: if (s != NULL) { RETVAL = s->name; } else { RETVAL = ""; } OUTPUT: RETVAL # End of XS-Code INCLUDE: const-xs.inc