如今谁用BCB做可视化组件设计简直就被人笑掉大牙,可惜多年前一个项目需要升级到Rad Studio XE,里面有部分组件用BCB做的,组件本身比较简单,但编译出错,提示propsys.h中的 IPropertyDescription重复定义,抛出十几个错误:
[BCC32 Error] propsys.h(1798): E2238 Multiple declaration for 'IPropertyDescription'
Full parser context
ExtToolBoxReg.cpp(6): #include ExtToolBoxReg.h
ExtToolBoxReg.h(7): #include c:\embarcadero\rad studio\8.0\include\windows\vcl\DesignEditors.hpp
DesignEditors.hpp(25): #include c:\embarcadero\rad studio\8.0\include\windows\vcl\ToolsAPI.hpp
ToolsAPI.hpp(22): #include c:\embarcadero\rad studio\8.0\include\windows\vcl\DockForm.hpp
DockForm.hpp(24): #include c:\embarcadero\rad studio\8.0\include\windows\vcl\Dialogs.hpp
Dialogs.hpp(20): #include c:\embarcadero\rad studio\8.0\include\windows\rtl\CommDlg.hpp
CommDlg.hpp(19): #include c:\embarcadero\rad studio\8.0\include\windows\rtl\ShlObj.hpp
ShlObj.hpp(26): #include c:\embarcadero\rad studio\8.0\include\windows\rtl\PropSys.hpp
PropSys.hpp(22): #include c:\embarcadero\rad studio\8.0\include\windows\sdk\propsys.h
[BCC32 Error] propsys.h(2081): E2015 Ambiguity between 'IPropertyDescription' and 'Designintf::IPropertyDescription'
Full parser context
ExtToolBoxReg.cpp(6): #include ExtToolBoxReg.h
ExtToolBoxReg.h(7): #include c:\embarcadero\rad studio\8.0\include\windows\vcl\DesignEditors.hpp
DesignEditors.hpp(25): #include c:\embarcadero\rad studio\8.0\include\windows\vcl\ToolsAPI.hpp
ToolsAPI.hpp(22): #include c:\embarcadero\rad studio\8.0\include\windows\vcl\DockForm.hpp
DockForm.hpp(24): #include c:\embarcadero\rad studio\8.0\include\windows\vcl\Dialogs.hpp
Dialogs.hpp(20): #include c:\embarcadero\rad studio\8.0\include\windows\rtl\CommDlg.hpp
CommDlg.hpp(19): #include c:\embarcadero\rad studio\8.0\include\windows\rtl\ShlObj.hpp
ShlObj.hpp(26): #include c:\embarcadero\rad studio\8.0\include\windows\rtl\PropSys.hpp
PropSys.hpp(22): #include c:\embarcadero\rad studio\8.0\include\windows\sdk\propsys.h
原因是组件中派生了TComponentEditor和TPropertyEditor的子类,用于设计时组件的菜单操作,经过1天的研究,原来是这两个Editor单元中没有#include <vcl.h>的缘故,吐血不止,但为什么BCB6不会报错?