CreateDLL is a tool which assists in generating Windows 32/64-bit DLLs for any Microsoft supported platform, making sure methods, functions and/or data items are exported without the need for duplicate maintenance of custom files or Microsoft-specific source code changes.
CreateDLL takes care of the
bothersome maintenance of function and data 'exports' for each DLL, a
task which previously required either updating a
platform-and-target-specific .DEF file with each
tiny API change and/or littering your header files with
declspec(dllexport) prefixes, which you had better
have wrapped inside some extra preprocessor macro magic to swap those
declspec(dllimport) for any
#include-ing user of your DLL code or you get to
live in another world of hurt.
Originally CreateDLL was conceived as part of the
OpenEXR ( http://www.openexr.com/ )
project and I thank the wizards at ILM from the bottom of my heart for this, as it enabled
me to rid several large and small cross-platform library projects of all
declspec gimmicks, resulting in cleaner code throughout.
If you haven't done any cross-platform C/C++ library development, you
don't know what you've been missing out on. ;-)
This is a Windows-specific tool. Usage documentation is included in the source and binary archives. The source archive of course includes an appropriate set of Visual Studio projects alongside the source code.
See the CreateDLL.README.FIRST text file included in each archive.
CreateDLL tool is always used as a Win32 binary, even when compiling Win64 x64 or IA64 OpenEXR binaries. This is done because it allows for cross-platform compilation on a Win32-based development system, targeting x64 and/or IA64-based test/production systems.
Support for any Microsoft supported platform (AMD64, IA64, ...) through allowing CreateDLL to pass the appropriate flags to the Microsoft linker.
Accepts optional .DEF file(s), which allows you to assign specific exports with preconfigured (fixed) ordinals. Very few projects require these, but now you come loaded for boar, for sure.
Can send custom options to the linker, which allows you to keep enjoying the benefits of 'link time optimizations', to name but one.
... list to be completed ... See CreateDLL.cpp history log in the comments at the top of that source file, for now.
CreateDLL is also used in other projects of mine, so some bits may not be all too relevant for OpenEXR as it comes in the box, but the changes are relevant for my other projects for sure.
Q: It doesn't rain but it pours missing member function linker errors for those DLLs?
A: You're sure you still have the linker options for all the projects which use the CreateDLL tool configured to produce a debug-level MAP file (even in 'Release' builds, and don't worry, CreateDLL in the post-build action will strip the DLL anyhow).
Be aware that the .MAP file export will only 'work' for CreateDLL if you make sure the Linker setting /OPT:NOREF (a.k.a. 'Keep Unreferenced Data') is turned on. This is not the default, so you'd better check.
Note: the 7z (7zip) downloads are strongly advised as those will be faster to download (and smaller too). For anyone who does not want to use 7zip for compelling religious reasons (like alarmingly restrictive enforced company policies), we provide a .tar.bz2 file as an alternative for some files. Click on the "bz2" links instead to download these - when available.
|Files / Archives||Date/Time||Quality||Notes|
CreateDLL-1.2.6.i_a.full-src.7z (22 Kb)
|2010-06-11||Production||has been used as-is a long time in house|
CreateDLL-1.2.6.i_a.bin-win32.7z (80 Kb)
|2010-06-11||Production||only MSVC2008 binaries for now|
(c)Copyright 2001-2010, Gerrit E.G. Hobbelt (Ger Hobbelt a.k.a. [i_a] ) - Hebbut.Net