У меня есть три класса: Общий, CFG и Оценщик.
Вот общий:
class Generic: public virtual Evaluator, public CFG, public LCDInterface {
Вот CFG:
class CFG : public virtual Evaluator {
И подклассы Evaluator ничего.
Я предоставляю DLL с именем PluginLCD, и в ней есть метод с именем Connect:
void PluginLCD::Connect(Evaluator *visitor) {
visitor_ = dynamic_cast<Generic *>(visitor);
if(!visitor_)
return;
type_ = visitor_->GetType();
}
Вот как я собираю DLL с помощью scons:
env.SharedLibrary(['PluginLCD.cpp', 'Evaluator.cpp', 'Generic.cpp', 'CFG.cpp'])
Теперь в моем коде есть два сценария. Один находится в классе LCDControl
, который подклассы CFG
. Другой сценарий выше, где Generic
подклассы Evaluator
и CFG
. В Evaluator есть метод LoadPlugins, который делает то, что предлагает его имя, передавая this
в DLL через метод Connect
. Что ж, в первом сценарии приведение к Generic *
в Connect должно вернуть NULL
. Однако во втором сценарии, насколько мне известно, должен быть возвращен действительный указатель. Похоже, этого не происходит. Я ошибаюсь по этому поводу?