Re: Converting static libs to DLLs
"Ben Burnett" wrote:
Has anyone converted a large number of static libraries to DLLs
using an automated method (or semi-automated)?
I'm not sure it is possible to do it automatically unless you have
highly sofisticated parser tool which can patch the files
according to predefined rules. In order to make a DLL from LIB you
need to do the following steps:
1. Go through all headers and add calling convention and
__declspec(dllimport/dllexport) modifiers for each function
declaration. You can spare __declspec(dllimport/dllexport) if you
strive for cross platform code, however you will need to add .DEF
file to the project with all exported names. Alternatively, you
can define a macro that will expand to __declspec(dllimport) for
client builds, to __declspec(dllexport) for the DLL build and to
nothing for Unix builds.
2. Change the project type to DLL instead of LIB. I think the
easiest way is to create new DLL project with VC++ and add to it
existing source files.
This was the easy part. Then you will need to think out the types
transferred between DLL and its callers. If these types require
allocation/freeing memory, then both DLL and its client must use
DLL version of CRT in order to preserve memory heap integrity. The
other way is to export additional functions that will within DLL
free whatever was allocated there. Or you can fall back to
fundamental C types in the same way as Win32 API does, for
example.
HTH
Alex