вот довольно качественное решение :
1) в хидере где нужен доступ к синглтону пишем
EXPORT_TYPE my_type * EXPORT_CALL GetMyType();
EXPORT_TYPE void EXPORT_CALL CreateSingletonMyType();
2) в реализации пишем такое :
my_type * _self_my_type = NULL;
my_type * EXPORT_CALL GetMyType()
{
return _self_my_type;
}
void EXPORT_CALL CreateSingletonMyType()
{
_self_my_type = new my_type;
}
void SetMyType(my_type * _self)
{
if (_self_my_type && ( _self != NULL))
{
FATAL_ERROR
}
else
_self_my_type = _self;
}
my_type::my_type()
{
SetMyType(this);
...
}
my_type::~my_type()
{
SetMyType(NULL);
}
3) в функции инициализации библиотеки просто вызываем CreateSingletonMyType, а потом просто удалям нужный нам класс и всё
в принципе CreateSingletonMyType можно и не выносить на обозрение
ps. всё это делается через макросы