好吧,由于 Embarcadero,我几乎要放弃大约 12 年的 delphi 和 c++ builder 了。从来没有见过这么有问题的IDE。
这次的问题是 dynamic_cast 总是返回 NULL。
在同一个单元中,我派生了两个类:
class TStructTreeNode: public TTreeNode
class PACKAGE TStructTreeView : public TTreeView
转换为 TStructTreeView 工作正常:
TStructTreeView* tv = dynamic_cast<TStructTreeView*>( AOwner->Owner );
但是对 TStructTreeNode 的强制转换总是返回 NULL:
TStructTreeNode* snode = dynamic_cast<TStructTreeNode*>(Items->Item[i]);
请注意 Items->Item[i] 实际上是 TStructTreeNode ,因为下一个代码可以正常工作:
((TStructTreeNode*)(Items->Item[i]))->ToggleChecked();
创建的节点如下:
TStructTreeNode* snode = new TStructTreeNode(Items,UniqueID);
TTreeNode* node = Items->AddNode(snode,Relative,S,Ptr,Method);
在同一个包中,我还有其他组件,其类 TMDTreeNode 和 TMDTreeView 以相同的方式派生,在该单元中,所有 dynamic_casts 都有效。
欢迎任何光线。
PS:虚拟析构函数已作为其他帖子添加并且无法正常工作。