想实现象codesite那样的功能,程序运行期间将基本数据类型,对象公开的属性的值等发送出来,实现应用程序级别的调试,辅助实施人员,现场查找问题。现在基本数据类型,对象公开的属性的值等已经基本实现,但是象结构体这样类型的值,如何知道呢??

解决方案 »

  1.   

    RTTI(Runtime time information)相关的资料, 
    看看<<Inside VCL>>, <<delphi 6 开发人员指南>>.
      

  2.   

    >>属性的值等已经基本实现你是怎么实现的?
      

  3.   

    to:hongqi162(失踪的月亮)
    属性的值等已经基本实现
    你是怎么实现的?
    ---------------------------对象的RTTI信息
    如下就是edtMemo运行期间通过我写的那个组件发送出来的信息
    Name = edtMemo
    Tag = 0
    Left = 72
    Top = 16
    Width = 297
    Height = 21
    Cursor = 0
    Hint = 
    HelpType = htContext
    HelpKeyword = 
    HelpContext = 0
    TabStop = True
    Anchors = akLeft,akTop
    AutoSelect = True
    AutoSize = True
    BevelEdges = beLeft,beTop,beRight,beBottom
    BevelInner = bvRaised
    BevelKind = bkNone
    BevelOuter = bvLowered
    BiDiMode = bdLeftToRight
    BorderStyle = bsSingle
    CharCase = ecNormal
    Color = -2147483643
    Constraints = 14242228
    Ctl3D = True
    DragCursor = -12
    DragKind = dkDrag
    DragMode = dmManual
    Enabled = True
    Font = 14242188
    HideSelection = True
    ImeMode = imDontCare
    ImeName = 
    MaxLength = 0
    OEMConvert = False
    ParentBiDiMode = True
    ParentColor = False
    ParentCtl3D = True
    ParentFont = True
    ParentShowHint = True
    PasswordChar = 
    PopupMenu = 0
    ReadOnly = False
    ShowHint = False
    TabOrder = 0
    Text = btnSendClick(Sender: TObject);
    Visible = True
      

  4.   

    //Delphi 的RTTI机制浅探
    //http://blog.dream4dev.com/article.asp?id=37RTTI 信息的结构定义在 TypInfo.pas 中:TTypeInfo = record // TTypeInfo 是 RTTI 信息的结构
    Kind: TTypeKind; // RTTI 信息的数据类型
    Name: ShortString; // 数据类型的名称
    {TypeData: TTypeData} // RTTI 的内容
    end;TTypeInfo 就是 RTTI 信息的结构。TObject.ClassInfo 返回指向存放 class TTypeInfo 信息的指针。Kind 是枚举类型,它表示 RTTI 结构中所包含数据类型。Name 是数据类型的名称。注意,最后一个字段 TypeData 被注释掉了,这说明该处的结构内容根据不同的数据类型有所不同。TTypeKind 枚举定义了可以使用 RTTI 信息的数据类型,它几乎包含了所有的 Delphi 数据类型,其中包括 tkClass。TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat,
    tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString,
    tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray);//tkRecord 支持机构体,
      

  5.   

    //http://www.01cn.net/cgi-bin/topic_show.cgi?id=2433&h=1&bpg=3&age=0普通 Record 没有 RTTI,不过要是你的 Record 中含有了 Delphi 的生存期
    自管理的类型,比如长字符串、动态数组、接口、变体类型等,这个 Record
    就有 RTTI 了,不过这些 RTTI 也仅仅包含这些信息而已,以便 Delphi 知道
    在需要释放一个 Record 的空间时还需要做那些额外操作,如减少长字符串
    的引用计数、释放动态数组、减少接口引用计数、释放变体类型等。准确的说
    就是包含每一个需要生存期自管理的 Field 的类型,仅此而已,但却没有包含
    更多的信息让你更“聪明”的操作该 Record。