我有三个类:Generic,CFG和Evaluator。
这是Generic:
class Generic: public virtual Evaluator, public CFG, public LCDInterface {
这是CFG:
class CFG : public virtual Evaluator {
评估员没有任何子类。
我提供了一个名为PluginLCD的DLL,它有一个名为Connect的方法:
void PluginLCD::Connect(Evaluator *visitor) {
visitor_ = dynamic_cast<Generic *>(visitor);
if(!visitor_)
return;
type_ = visitor_->GetType();
}
以下是我通过scons编译DLL的方法:
env.SharedLibrary(['PluginLCD.cpp', 'Evaluator.cpp', 'Generic.cpp', 'CFG.cpp'])
现在,我的代码中有两种情况。一个在类LCDControl
中,其子类为CFG
。另一种情况高于Generic
子类Evaluator
和CFG
。 Evaluator有一个名为LoadPlugins的方法,它的名字就是这样做的,它通过方法this
将Connect
传递给DLL。好吧,在第一个场景中,Connect中Generic *
的强制转换应返回NULL
。但是,在第二种情况下,据我所知,应该返回一个有效的指针。它似乎没有以这种方式发生。我错了吗?
答案 0 :(得分:2)
众所周知,dynamic_cast会与许多编译器(包括MSVC和gcc)跨越模块边界。我不确切地知道为什么会这样,但谷歌搜索它会产生许多命中。我建议首先尝试摆脱dynamic_cast,而不是试图找出它在第二种情况下返回null的原因。