From: Jari Williamsson Date: 2008-01-03T03:12:31+09:00 Subject: Re: Windows Compilation Madness Gary Wright wrote: > Unlink Linux (and *BSD, Mac OS X...), Windows does not come packaged > with a development environment and in fact there are multiple > mutually-incompatible development environments (Cygwin, MinGW, VC6, > VC8). For the most part you can not mix-and-match object code (dlls) > created by these different environments with the biggest problem being > that there is no common memory allocation library. > > I assume this is why some Windows software comes distributed with its > own collection of 'standard' dlls compiled in the same development > environment as the underlying application. DLLs is a Windows standard file format (pretty much like an executable file with an exported table of names) and can most often be used between compilers. The thing that I think differ the most in DLLs is how C++ classes are represented, here the different compilers have different incompatible solutions. Another thing that can differ is stack calling conventions, but the Windows SDK has a couple of predefined function prefixes that are compatible across compilers. Normally, you use an implib tool from your Windows compiler to create a small lib file that maps to the DLL and are linked statically to your application. Since DLLs are dynamic, they can be replaced with later versions as long as the required exported names are still there. Best regards, Jari Williamsson