Нужен совет.
Собрался написать разделяемую библиотеку под Linux, но есть задумка сделать ее кроссплатформенной. Меня вполне устроила бы совместимость только с платформами POSIX/GCC и Win32/VC++.
Библиотека будет загружаться и выгружаться многопоточным приложением.
Сколько копий этого приложения будет на машине - не известно.
Нужно отработать инициализацию и деинициализацию общих данных 
процесса.
С POSIX все просто: init() и fini(), а память данных у каждого процесса своя.
С Win32/VC++ я DLL не писал (только в BCB6).
#ifdef  __cplusplus
extern "C" {
#endif
#include "my_struct.h"
void lib_init(void);
void lib_fini(void);
my_struct_t *my_struct;
/* System library interface */
#ifdef __WIN__
#include <windows.h>
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved);
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH:
            lib_init();
            break;
        case DLL_PROCESS_DETACH:
            lib_fini();
            break;
    }
    return TRUE;
}
#else /* POSIX */
void __attribute__ ((constructor)) _init(void)
{
    lib_init();
}
void __attribute__ ((destructor)) _fini(void)
{
    lib_fini();
}
#endif /* WIN/POSIX */
/* Library init/deinit */
static void lib_init(void)
{
    my_struct = (my_struct_t*)malloc(sizeof(my_struct_t));
}
static void lib_fini(void)
{
    free(my_struct);
}
#ifdef  __cplusplus
}
#endif
Такой вариант имеет право на жизнь?