こんな感じとか

require 'dl/import'
require 'dl/types'

module CBTest
extend DL::Importer
dlload 'user32.dll'
include DL::Win32Types
typealias "LPARAM", "void*"
extern "BOOL EnumWindows(void*, LPARAM)", :stdcall
WNDENUMPROC = bind("BOOL EnumFunc(HWND, LPARAM)", :stdcall) do |hwnd, obj|
DL.dlunwrap(obj).call(hwnd)
end
end

CBTest::EnumWindows(CBTest::WNDENUMPROC, DL.dlwrap(proc {|hwnd| p hwnd; 1 }))