GCC won't work for OP2 at all. The only supported compiler is a Microsoft compiler (this is not by choice. The people to blame are the OP2 developers for using MSVC5 in the beginning).
The reason for it is the way that microsoft compilers decorate exported class members. For example, TethysGame::CreateUnit(...) gets turned into ?CreateUnit@TethysGame@@SIHAAVUnit@@W4map_id@@ULOCATION@@H1H@Z by the compiler.
The problem with GCC / Mingw32 (or any other compiler -- except maybe Borland's, they might support it) is that they use different forms for decorated names. Because of that when the DLL is loaded, Windows wouldn't be able to find the correct names inside Outpost2.exe, thus the DLL won't run.
There's no real fix for this either, even if we were to do something, say, recompile GCC to support different name decoration, because Microsoft doesn't release details on their name decoration scheme. (You have to use their proprietary tools - their compiler cl.exe to 'decorate' names, and undname.exe to 'undecorate' names).
However, you can download their compiler for free, legally, from their website. (The wiki article explains this, and you can find it by searching for "Visual C++ Toolkit" on the microsoft website)