(import (chicken foreign)) #> struct PD {char *name; int metaType;}; <# (define dos_parameterdefinition_create (foreign-primitive scheme-object ((c-string name) (int metaType)) "char* pdname = (char*) malloc(strlen(name)+1);" "strcpy(pdname, name);" "struct PD pd = {.name = pdname, .metaType = metaType};" "char pdc[sizeof(pd)];" "memcpy(pdc, &pd, sizeof(pdc));" "C_word* ptr = C_alloc(C_SIZEOF_STRING(sizeof(pdc)));" "C_return(C_bytevector(&ptr,sizeof(pdc),pdc));")) (define dos_parameterdefinition_name (foreign-lambda* c-string ((blob sobj)) "C_return(((struct PD*)sobj)->name);")) (define x (dos_parameterdefinition_create "foo" 33)) (print (dos_parameterdefinition_name x))