производная функция c ++ не вызывается - PullRequest
1 голос
/ 12 марта 2012

Извините за все недоразумения, я неправильно набрал :: для : в наследовании классов, а также пропустил ключевое слово public. Это всегда было :. Еще раз спасибо за помощь.

Сначала заголовок может быть слишком общим, но я не знаю лучшего способа описать проблему здесь.

Что у меня есть,

class __declspec(dllimport) Foo1:public Foo
{
  virtual BOOLEAN bar(Arg *arg);
}

class __declspec(dllimport) Foo2:public Foo1
{   
    virtual BOOLEAN bar(Arg *arg);  //newly added
}

обе функции реализованы, и у меня есть функция под Foo2, которая

BOOLEAN Foo2::dosomething(Arg* arg)  //Question 1, should the position of * matter here?
{
  bar(arg);
}

Но это все равно вызывает Foo1::bar вместо Foo2::bar. Я дважды проверил подпись, и нет проблем. Итак, я провел несколько экспериментов,

  1. Использование PE Explorer для сравнения искаженных имен функций, экспортированных в dll Foo1 и Foo2, результаты

    ?bar@Foo1@@MAEEPAVARG@@@Z
    ?bar@Foo2@@UAEEPAVARG@@@Z
    Вопрос2, разница букв там есть или нет?

  2. Извлеките bar из Foo1, а затем запустите, возникла ошибка и было сказано:

    The procedure engry point ?bar@Foo1@@MAEEPAVARG@@@Z could not be located in the dynamic link library libFoo1.dll.

Я не понимаю, что вызов находится под Foo2, но он все еще пытается найти функцию Foo1. Кроме того, существует несколько уровней наследования до Foo1 и после Foo2, поэтому я не уверен, что мне не хватает чего-то важного с точки зрения использования деривации функций или экспорта dll, ни один эксперт не разбирается ни в этом.

Надеюсь, я смогу получить некоторые предложения о том, как следует работать, или о возможных причинах.

Не уверен, ясно ли я описал проблему, при необходимости измените ее.

Спасибо!

1 Ответ

0 голосов
/ 13 марта 2012

BOOLEAN Foo2 :: dosomething (Arg * arg) // Вопрос 1, должно ли здесь иметь значение положение *?

Нет, позиция * не имеет значения.

Является ли функция DoSomething конструктором или деструктором?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...