覆盖.dll中的类/函数

时间:2010-04-05 03:54:42

标签: c++ function virtual override dll

假设我有A类和B类.B继承自A类,并实现了一些虚函数。唯一的问题是B是在.dll中定义的。现在,我有一个返回类A实例的函数,但它从.dll中的静态函数中检索它,返回类B的实例。我的计划是调用创建的对象,希望有函数在.dll中执行而不是在A类中定义的函数。出于某种原因,我一直受到限制的内存访问错误。有什么我不明白会阻止这个计划的工作吗?

3 个答案:

答案 0 :(得分:1)

C ++类不能很好地跨越DLL边界。 DLL和EXE需要使用完全相同的编译器和版本构建 - 最好是一起构建。这是因为类实现细节,如vtbl布局/顺序以及某些标准库特性的实现(即std::string差异)是不可移植的。不同编译器的名称修改方案在编译器/版本之间也是不可饮用的。您可以在DLL边界外可靠地公开的唯一接口是C接口。

因为我不知道这里的确切方案我不能确定,但​​你可能在DLL边界调用某种类型的未定义行为。

编辑:也有可能在某些时候卸载了DLL,导致在B中调用不存在的代码。

答案 1 :(得分:1)

请参阅我关于此主题的其他广泛问题和答案 - 它有帮助吗? How to work (portably) with C++ class hierarchies & dynamic linked libraries

答案 2 :(得分:0)

您是否尝试使用Visual Studio调试器进行调试?

设置调试器以捕获win32异常,方法是转到Debug菜单 - > Exceptions并标记Win32 exceptionsThrown旁边的复选框。 现在使用F5激活你的exe。崩溃应警告调试器,您应该能够看到访问冲突的确切位置。