
Gennadiy Rozental wrote:
Hi,
I am trying to finally implement DLL version of Boost.Test components. Here is several issues/questions I have:
1. main() function
AFAIK there is no way to put a main function in DLL on windows. What should we do instead? I reworked the framework specifically for the purpose of making this kind of separation easier. But I still would like to hear what people think in this regard.
The equivalent to an entry point routine in a DLL is most often called DllMain or DllEntryPoint with some compilers. There are many things one can not do in the Dll entry point and it is used just as a way of initializing the Dll. If you need some function that actually serves to call other functionality in a Dll as if you had a main() routine in an exe, pick out whatever name you think appropriate, add it as a function in your Dll and export it so that it can be called from outside the Dll.
2. main() function again
On unix(s) there is a possibility to put main info dlls (If I am wrong please correct me). Should we use different semantic for Windows and Unix(s) or use the one I implement for windows?
3. init_unit_test_suite
I need to call external function from inside of DLLs. How it should be declared? Cause I am getting unresolved symbols error
Most Windows compilers support __declspec(dllexport) or __declspec(dllimport) in front of a function or class name and it is used like: #if defined(BUILD_MY_DLL) #define MY_DLL_IMPORT_EXPORT_MACRO __declspec(dllexport) #elif defined(USE_MY_DLL) #define MY_DLL_IMPORT_EXPORT_MACRO __declspec(dllimport) #else #define MY_DLL_IMPORT_EXPORT_MACRO __declspec(dllimport) #endif and then for some function or class you want to export/import you write: MY_DLL_IMPORT_EXPORT_MACRO void SomeFunction(); or MY_DLL_IMPORT_EXPORT_MACRO class SomeClass { // etc. }; Often USE_MY_DLL can be defined internally depending on whether you can figure out whether or not the module is being used as a DLL or a static library, else the user can be required to define it or not.
4. runtime-link
In my Jamfile in default build section of build rule there is <runtime-link>static/dynamic. Should I keep this? Should I use static for lib rule and dynamic for dll rule? Nothing for lib dynamic for dll?