未调用visual c++派生的函数

visual c++ derived function not invoked

本文关键字:函数 派生 c++ 调用 visual      更新时间:2023-10-16

很抱歉,我在类继承中为:键入了错误的::,并且缺少关键字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比较Foo1Foo2的dll中导出的损坏函数名,结果是

    ?bar@Foo1@@MAEEPAVARG@@@Z
    ?bar@Foo2@@UAEEPAVARG@@@Z
    问题2,字母的差异应该在里面吗?

  2. Foo1中删除bar,然后运行,出现错误并显示,

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

这里我不明白的是调用在Foo2下,但它仍在尝试查找Foo1的函数。此外,在Foo1之前和Foo2之后有多个级别的继承,所以我不确定我是否遗漏了函数派生使用或dll导出方面的重要内容,这两者都不是专家。

希望我能得到一些关于我应该努力的方向或可能的原因的建议。

不确定我是否清楚地描述了这个问题,如有必要,可以随时修改。

谢谢!

BOOLEAN Foo2::dosomething(Arg*Arg)//问题1,*的位置在这里重要吗?

不,*的位置无关紧要。

DoSomething函数是构造函数还是析构函数?