高难度动态链接库问题
问题是这样的,我先写了一个类,里面有很多的静态成员变量和静态成员函数,这个类在我的第一个dll里面了。然后在第二个dll里面我要派生这个类。第二个类里面也是一些静态成员。最后我要在另外一个程序里面用这两个dll,现在的问题是那些静态成员变量要怎么声明。举例如下:
/// lib1.h
class AFX_EXT_CLASS CLib1Class
{
public:
static void Init();
CLib1Class();
virtual ~CLib1Class();
static double* m_pFKMenu;
static double m_dV;
static CString m_strCtrlName;
};
//lib1.c
AFX_EXT_DATA CString CLib1Class::m_strCtrlName;
AFX_EXT_DATA double* CLib1Class::m_pFKMenu = NULL;
AFX_EXT_DATA double CLib1Class::m_dV = 0.0f;
CLib1Class::CLib1Class()
{
}
CLib1Class::~CLib1Class()
{
}
void CLib1Class::Init()
{
m_pFKMenu = new double(160.7);
m_dV = 10.2;
}
///lib2.h
class AFX_EXT_CLASS CLib2Class : public CLib1Class
{
public:
static void FK();
CLib2Class();
virtual ~CLib2Class();
};
//lib2.c
CLib2Class::CLib2Class()
{
}
CLib2Class::~CLib2Class()
{
}
void CLib2Class::FK()
{
if (CLib2Class::m_pFKMenu==NULL)
{
AfxMessageBox("Help me,please!");
}
}
//测试代码
CLib1Class::Init();
CString Mag;
Mag.Format("%.6f",CLib1Class::m_dV);
MessageBox(Mag);
Mag.Format("%.6f",CLib2Class::m_dV);
MessageBox(Mag);
if (CLib1Class::m_pFKMenu == NULL)
{
MessageBox("Fark U ag!");
CLib1Class::m_pFKMenu = new double(10.2);
Mag.Format("%.6f",*CLib2Class::m_pFKMenu);
MessageBox(Mag);
}else{
Mag.Format("%.6f",*CLib2Class::m_pFKMenu);
MessageBox(Mag);
}
CLib2Class::FK();
Mag.Format("%.6f",*CLib2Class::m_pFKMenu);
MessageBox(Mag);
如果没有中间的那个动态链接库第一个声明是正确的,现在有了第二个动态链接库发现很麻烦。一直也没有想到合适的方法来。个人认为其难度在于要在第二个库里面要有声明,同时还得是引用的第一个库里面的。