未调用visual c++派生的函数
visual c++ derived function not invoked
很抱歉,我在类继承中为:
键入了错误的::
,并且缺少关键字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比较
Foo1
和Foo2
的dll中导出的损坏函数名,结果是?bar@Foo1@@MAEEPAVARG@@@Z
?bar@Foo2@@UAEEPAVARG@@@Z
问题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函数是构造函数还是析构函数?
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 使用基类指针创建对象时,缺少派生类析构函数
- 在 C++ 中用派生类型重写成员函数
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 在派生类中绑定非静态模板化成员函数
- 使用 std::variant<...时调用 BaseState 函数而不是派生函数>
- C++:为什么无法在派生类中访问受保护的构造函数?
- C++派生的类构造函数
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 覆盖虚拟函数 - 派生类具有不同的参数
- 正在调用基方法,而不是从构造函数派生方法
- 从具有相同虚拟函数的父函数派生时如何调用子函数
- 从派生类对象调用基类函数.派生类构造函数中设置的基类数据成员