Spent whole freaking evening trying to port ruby's spread library C binding to windows. Ruby just wouldn't see the Init_spread() symbol inside the DLL. The key point was - the init function in ruby's binding C file should be declared as (dllexport) void _cdecl Init_spread() {... } to make sure that the function name won't be changed and it still would be visible within DLL export table.
The other interesting observation: compilers on windows platform are mad hell. Each of them has his own convention to name functions. For some obscure reason when i was trying to build stuff with watcom compiler, I'd get heaps of 'unresolved refernces' to [functionname]_is functions. Didn't figure out how to solve this bit, so I simply rebuilt the whole thing with VC7.
VC7 command line is also ffreaky, apparently you need to tell alot of stuff (including location of windows.h) through command line switches otherwise the thing just wouldn't build......