我有一个相当大的Core项目,我正在使用,我试图使它适应我使用的DLL引擎,我得到一堆错误,如:
未解析的外部符号"private:static class
当在DLL中包含Core中的一些头文件时,该类通过__declspec(dllexport)导出,但任何带有静态成员的头文件都会抛出有关静态成员的大量错误.
这是一个相当大的项目,我不能完全绕过去除我看到的每个静态类成员,无论如何围绕这种事情?
正在导入的类的基本示例:
class __declspec(dllexport) MyClass
{
public:
static bool m_someVar;
}
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,我只想解决m_someVar在类实现文件中的定义/声明(忘记术语)
编译时Core你想要这些函数dllexport; 但是,当您编译DLL时,您希望它们是dllimport.在你的情况下,你总是将它们定义为dllexport,因此当你链接DLL它抱怨你已经声明了一个函数(甚至说你要导出它)而没有定义它.
解决方案很简单.而不是手动__declspec,根据您是CoreDLL还是DLL 创建宏:
#ifndef I_AM_A_DLL
#define EXPORT __declspec(dllexport)
#define IMPORT __declspec(dllimport)
#else
#define EXPORT __declspec(dllimport)
#define IMPORT __declspec(dllexport)
#endif
Run Code Online (Sandbox Code Playgroud)
使用EXPORT中的功能Core 和IMPORT对外部DLL函数:
class EXPORT MyClass
{
public:
static bool m_someVar;
}
Run Code Online (Sandbox Code Playgroud)