use Inline C => DATA => LIBS => '-luser32';

Enum_Child_Windows(sub { print "foo(@_)\n" });

__END__
__C__
#include <windows.h>

static SV* coderef;
void set_coderef(SV* cref) {
  coderef = cref;
}

BOOL FAR PASCAL Enum_Child_Proc (HWND hWnd, LPARAM Param) {
  dSP;
	ENTER;
  SAVETMPS;
  PUSHMARK(SP);
  Inline_Stack_Push(sv_2mortal(newSViv(hWnd)));
	Inline_Stack_Push(sv_2mortal(newSViv(Param)));
	Inline_Stack_Done;
  call_sv(coderef, 0);
  SPAGAIN;
  FREETMPS;
  LEAVE;
  return 1;
}

void Enum_Child_Windows(SV* code) {
  set_coderef(code);
  EnumChildWindows(NULL, *Enum_Child_Proc, 1);
}
