这种情况出现的比较少,从工作到现在将近一年时间就遇到两次。
主要表现为子类重载了父类的虚函数后,使用正常方法(即父类指针指向子类对象后调用该虚函数),结果调用的仍为父类的函数。
一开始以为是指针指向有问题,或者虚函数的声明名称写错了这种小问题,但是检查后都是正确的。
更详细的情况:基于cad的二次开发,实际上述的子类是某个继承于AcDbEntity类的自定义构件,在cad打开情况下,绘制一个实体后,其并没有调用子类的虚函数。
而将图纸保存关闭cad后,再重新打开可发现之前绘制的实体都能正常调用子类虚函数了。
基本来说,这个详细情况并不能推敲出太多原因,在此也只是记录一下。
-----------------------------------------------------------------------------------------------------------------------------------
最后考虑到可能是只重编了修改的模块,其他关联模块未编译导致生成的dll和dbx文件之间无法正常调用。
在相关的模块都重新编译后,函数调用果然恢复正常。
根据以往的情况来看,只编译修改的模块,关联模块不重新编译的确有可能出现一些奇怪的问题。
当然,更多的问题还是无法匹配导致文件加载失败(比较明显)。
虽然更细致的原因暂时没查出来,不过问题也算解决了。
可喜可贺可喜可贺。