Извините за все недоразумения, я неправильно набрал ::
для :
в наследовании классов, а также пропустил ключевое слово 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
. Я дважды проверил подпись, и нет проблем. Итак, я провел несколько экспериментов,
Использование PE Explorer для сравнения искаженных имен функций, экспортированных в dll Foo1
и Foo2
, результаты
?bar@Foo1@@MAEEPAVARG@@@Z
?bar@Foo2@@UAEEPAVARG@@@Z
Вопрос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, ни один эксперт не разбирается ни в этом.
Надеюсь, я смогу получить некоторые предложения о том, как следует работать, или о возможных причинах.
Не уверен, ясно ли я описал проблему, при необходимости измените ее.
Спасибо!