When you configure and compile ocaml itself for your system, you have to specify whether you are going to use MSVC or GCC. It uses this information to know what sort of object files and libraries to expect when linking in C code with OCaml (cf. JNI). For example, ocaml atop MSVC will pass things like "/lib wsock32.lib" or whatnot.
There isn't really any difference and you could call the underlying C compiler yourself. You can pass -verbose to ocamlc to see what it is doing under the hood. For example, when you use ocamlopt to build zlib.c in WeiDU it's really doing:
+ cl /nologo /Ox /MT -c "-Iobj/x86_WIN32" "-Izlib" -I"C:\ocaml-3.06-msvc\lib" "zlib/zlib.c"