TDateTime类型以前只能看到float类型,xe后系统带的插件DateTimeVisualizer.pas可以看到字符串格式的时间,更清楚。
dt = TDateTime::CurrentDateTime();
跟踪看到dt的字符串值。
但是自定义一个日期类Tmydt,就无法看到字符串格式了,看来DateTimeVisualizer.pas只支持系统现有的类DateTimeVisualizerTypes数组中描述的12种情况。
class Tmydt:public TDateTime
{
public:
TDateTime& __fastcall operator =(const TDateTime& rhs)
{Val = rhs.Val; return *this;}
};
DateTimeVisualizerTypes: array[0..12] of TDateTimeVisualizerType =
(
(TypeName: 'TDateTime'; TypeLang: tlDelphi; DateTimeType: dttDateTime;),
(TypeName: 'TDate'; TypeLang: tlDelphi; DateTimeType: dttDate;),
(TypeName: 'TTime'; TypeLang: tlDelphi; DateTimeType: dttTime;),//三种类型
(TypeName: 'function: TDateTime'; TypeLang: tlDelphi; DateTimeType: dttDateTime;),//什么类型呢
(TypeName: 'function: TDate'; TypeLang: tlDelphi; DateTimeType: dttDate;),
(TypeName: 'function: TTime'; TypeLang: tlDelphi; DateTimeType: dttTime;),
(TypeName: 'System::TDateTime'; TypeLang: tlCpp; DateTimeType: dttDateTime;),
(TypeName: 'System::TDateTime &'; TypeLang: tlCpp; DateTimeType: dttDateTime;),
(TypeName: 'TDateTime &'; TypeLang: tlCpp; DateTimeType: dttDateTime;),
(TypeName: 'System::TDate'; TypeLang: tlCpp; DateTimeType: dttDate;),
(TypeName: 'TDate &'; TypeLang: tlCpp; DateTimeType: dttDate;),
(TypeName: 'System::TTime'; TypeLang: tlCpp; DateTimeType: dttTime;),
(TypeName: 'TTime &'; TypeLang: tlCpp; DateTimeType: dttTime;)
);
System::TDateTime c++builder必须加前缀System,否则和第一个重复了,另外不加前缀也识别不了。
<pre name="code" class="delphi">'System::TDateTime &'和'TDateTime &' 是为了解决引用类型参数查看。
void TForm7::SetDT(System::TDateTime &val)
{
val++;
}
通过Inspector的类型看到c++builder的定义确实要加前缀System::的
这个例子中区分c++和delphi,原因是delphi的值就在dt本身就可以看到,而c++builder里是在dt.val才能看到,所以区别处理了一些。
delpih就无需调用.val属性了
编写的调试查看器要支持c++builder,就要在GetSupportedType
方法里返回类属性名称和GetSupportedTypeCount里返回所有兼容的类属性描述个数