我的代码使用了一个第三方库,其中有一些导出类中包含虚内联函数如:
class AFX_EXT_CLASS CBase
{
virtual void OnStop(){};
}class AFX_EXT_CLASS CType
{
virtual void OnStop();
}链接时会产生LNK2001错误,CBase::OnStop和CType::OnStop是不可解析的外部符号,如果自己加一个定义,又会产生函数体已定义的编译错误,哪些大侠知道如何解决?非常感谢!
class AFX_EXT_CLASS CBase
{
virtual void OnStop(){};
}class AFX_EXT_CLASS CType
{
virtual void OnStop();
}链接时会产生LNK2001错误,CBase::OnStop和CType::OnStop是不可解析的外部符号,如果自己加一个定义,又会产生函数体已定义的编译错误,哪些大侠知道如何解决?非常感谢!
class AFX_EXT_CLASS CBase
{
virtual void OnStop(){};
} class AFX_EXT_CLASS CType
{
virtual void OnStop(){};
}
虚函数的话可以自己派生一个类,实现之。另空的内联虚函数标准写法不是楼上的写法吧?virtual void OnStop(){}; 应该是没有;号的。
virtual void OnStop(){}
不要引号
如果你想在派生类中实现这些虚函数功能,用纯虚函数吧,不用实现代码。
否则这些虚函数还是不要在头文件内实现,看看MFC有没有你这种做法就知道了。
估计编译器都不知道是先调用派生类的虚函数,还是调用基类的内联虚函数。如果可行,呵呵,希望广而告之。
class AFX_EXT_CLASS CBase
{
virtual void OnStop(){};
} class AFX_EXT_CLASS CType
{
virtual void OnStop();
} 而是这样:
class CBase
{
virtual void OnStop(){};
} class CType
{
virtual void OnStop();
}
就可以了。
当然使用这两个类的时候必须用指针new,不能用对象。这个你应该知道的吧?(有些细节记不清了,应该是这样的。)
并将此这个lib连接到你的工程中
class AFX_EXT_CLASS CBase
{
virtual void OnStop();
} class AFX_EXT_CLASS CType
{
virtual void OnStop();
} 用这种方法导出类,调用方使用时是一种介于显示和隐式之间的方式,即:要包含头文件,却不需引入库(.lib)。
但提供dll的一方同时应该提供全局的或友元的动态创建和销毁类对象的函数(看看有没有?)。调用方法大致如下:
LoadLibrary("");
pCreateInstance = GetProcessAddress(...);
pDelInstance = GetProcessAddress(...);
CType *ptype = pCreateInstance(...);
ptype->Stop();
......
pDelInstance (ptype);