Gather the needed files in one directory :
cldbm.c, dbm.ml, dbm.mli (from ocaml source otherlibs/dbm) 
ndbm.h, gdbm-dll.h  (from gdbm-1.8.3-1-src.zip) 
libgdbm_compat.lib (from gdbm-1.8.3-1-lib.zip) 
build.bat
@REM build.bat
@REM c stubs
ocamlc -verbose -ccopt -I. -ccopt -I%OCAMLLIB%\caml -c -o cldbm.obj cldbm.c
ocamlmklib -verbose -o _dbm_stubs libgdbm_compat.lib cldbm.obj
@REM cmi
ocamlc -c dbm.mli
@REM ocaml stubs
ocamlc -c dbm.ml
ocamlopt -c dbm.ml
@REM final library
ocamlc -verbose -a -custom -o dbm.cma dbm.cmo -dllib -ldll_dbm_stubs.dll -cclib -l_dbm_stubs
ocamlopt -verbose -a -o dbm.cmxa dbm.cmx -cclib -l_dbm_stubs
-I%OCAMLLIB%\caml is needed because cldbm.c references caml headers as 
#include <mlvalues.h> instead of #include <caml/mlvalues.h>.
So you can patch four lines in cldbm.c and do not depend on OCAMLLIB environment variable.
Just run build.bat
If everything works fine you will have
dbm.cmi with ocaml Dbm interface 
lib_dbm_stubs.lib with C stubs needed for linking 
dbm.cma  for bytecode builds 
dbm.cmxa and dbm.lib for native builds  
dbm_test.ml
open Dbm
open Printf
let main () = 
  let db = opendbm "test" [Dbm_rdwr;Dbm_create] 511 in
  add db "test" "some data";
  add db "test2" "some data 2";
  add db "test3" "some data 3";
  print_endline (find db "test2");
  iter (fun key data -> printf "%s : %s\n%!" key data) db;
  close db
let _ = Printexc.print main ()
build.bat
ocamlc -verbose -o dbm_test.exe dbm.cma dbm_test.ml
ocamlopt -verbose -o dbm_test.native.exe dbm.cmxa dbm_test.ml
dbm3.dll and gdbm3.dll (from gdbm-1.8.3-1-bin.zip) needed at runtime
2008-11-10