我在从DLL导出模板化类然后在我的应用程序中导入它时遇到问题。
我的项目结构如下
我现在的问题是一切正常,直到我使用第一个基类(CASingleton)中定义的一些函数,这是一个模板化的类。
这些是类:
第一个DLL中的CASingleton(CommonDLL)
CASingleton.h
template<class T>
class ANIMACOMMON_API CASingleton
{
public:
T& CreateInstance()
{
assert(!m_pSingletonInstance && "Trying to create for the second time a singleton.");
m_pSingletonInstance = new T();
return GetInstance();
}
void DeleteInstance()
{
assert(m_pSingletonInstance);
m_pSingletonInstance = 0;
}
T& GetInstance()
{
assert(m_pSingletonInstance);
return *m_pSingletonInstance;
}
T* GetInstancePtr()
{
assert(m_pSingletonInstance);
return m_pSingletonInstance;
}
private:
static T* m_pSingletonInstance;
};
CASingleton.cpp
#include "ASingleton.h"
template<class T> T* CASingleton<T>::m_pSingletonInstance = NULL;
ANIMACOMMON_API定义如下
#ifdef ANIMACOMMON_EXPORTS
#define ANIMACOMMON_API __declspec(dllexport)
#else
#define ANIMACOMMON_API __declspec(dllimport)
#endif
然后在第二个DLL(CoreDLL)中,我将这个类派生自CASingleton
CAEngine.h
class ANIMACORE_API CAEngine : public CASingleton<CAEngine>
{
public:
CAEngine();
virtual ~CAEngine();
void Test() { int i = 0; i++; }
};
CAEngine.cpp
template class CASingleton<CAnimaEngine>;
CAnimaEngine::CAnimaEngine()
{
}
CAnimaEngine::~CAnimaEngine()
{
}
ANIMACORE_API定义如下
#ifdef ANIMACORE_EXPORTS
#define ANIMACORE_API __declspec(dllexport)
#else
#define ANIMACORE_API __declspec(dllimport)
#endif
最后一件事就是应用程序只有这样的主要功能:
int main()
{
CAEngine engineOne;
engineOne.Test();
engineOne.CreateInstance();
CAEngine engineTwo;
}
所有DLL编译都很好,但是当我尝试编译应用程序时,编译器给了我这个错误
main.obj : error LNK2019: riferimento al simbolo esterno "__declspec(dllimport) public: class CAEngine & __thiscall CASingleton<class CAEngine>::CreateInstance(void)" (__imp_?CreateInstance@?$CASingleton@VCAEngine@@@@QAEAAVCAEngine@@XZ) non risolto nella funzione _main
仅在我发表评论
时编译engineOne.CreateInstance();
我在基类中使用的唯一函数。
有什么想法吗?