自定义调试查看器分析 DateTimeVisualizer(一)

本文探讨了如何使用DateTimeVisualizer.pas插件在Delphi和C++ Builder环境中查看不同日期类(如TDateTime、TDate、TTime等)的字符串表示形式。特别关注了自定义日期类Tmydt无法正常显示字符串表示的问题,并解释了DateTimeVisualizer.pas仅支持特定类的原因。文章还提到了在C++ Builder中通过前缀System::解决引用类型参数查看的方法,以及编写调试查看器时需要考虑的语言差异。最后,文章详细介绍了如何在GetSupportedType方法中返回类属性名称和GetSupportedTypeCount中返回所有兼容类属性描述数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TDateTime类型以前只能看到float类型,xe后系统带的插件DateTimeVisualizer.pas可以看到字符串格式的时间,更清楚。

   TDateTime dt;

  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里返回所有兼容的类属性描述个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值