Нужен совет.
Собрался написать разделяемую библиотеку под 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
Такой вариант имеет право на жизнь?