Во-первых, вашему классу нужен интерфейс:
class CTestIface
{
virtual ~CTestIface(){}
virtual void foo() = 0;
};
Затем в библиотеку добавьте реализацию:
class CTest1 : public CTestIface
{
void foo(){ /*...*/ }
};
и функции c для создания / удаления объектов типа CTest11:
extern C{
void* Create() { return new CTest1; };
void Delete( void* o ) { delete( (CTest1*) o ); }
}
Как видите, вам нужен только заголовок, определяющий интерфейс, и функции для создания / удаления объектов.
кстати, в тестах вы должны использовать фиктивные классы (наследуя от интерфейса)