If you want to play with fire :D. Only use in a c-fonction where the pointer won't persist in c-land.
(c-declare #<<c-declare-end
typedef ___U32* U32PTR;
___SCMOBJ SCMOBJ_to_U32PTR (___SCMOBJ src, U32PTR *dst) { ___SCMOBJ ___temp; // for U32VECTORP ___SCMOBJ ___err = ___FIX(___NO_ERR); if (!___U32VECTORP(src)) ___err = ___FIX(___UNKNOWN_ERR); else { *dst = ___CAST(___U32*,___BODY_AS(src,___tSUBTYPED)); } return ___err; }
#define ___BEGIN_CFUN_SCMOBJ_to_U32PTR(src,dst,i) \ if ((___err = SCMOBJ_to_U32PTR (src, &dst)) == ___FIX(___NO_ERR)) { #define ___END_CFUN_SCMOBJ_to_U32PTR(src,dst,i) }
#define ___BEGIN_CFUN_U32PTR_to_SCMOBJ(src,dst) \ if ((___err = ___FIX(___UNKNOWN_ERR)) == ___FIX(___NO_ERR)) { #define ___END_CFUN_U32PTR_to_SCMOBJ(src,dst) }
#define ___BEGIN_SFUN_U32PTR_to_SCMOBJ(src,dst,i) \ if ((___err = U32PTR_to_SCMOBJ (src, &dst)) == ___FIX(___NO_ERR)) { #define ___END_SFUN_U32PTR_to_SCMOBJ(src,dst,i) }
#define ___BEGIN_SFUN_SCMOBJ_to_U32PTR(src,dst) \ { ___err = ___FIX(___UNKNOWN_ERR); #define ___END_SFUN_SCMOBJ_to_U32PTR(src,dst) }
c-declare-end )
(c-define-type U32PTR "U32PTR" "U32PTR_to_SCMOBJ" "SCMOBJ_to_U32PTR")