200分问一个问题。如何查知一个结构体各成员的值。 想实现象codesite那样的功能,程序运行期间将基本数据类型,对象公开的属性的值等发送出来,实现应用程序级别的调试,辅助实施人员,现场查找问题。现在基本数据类型,对象公开的属性的值等已经基本实现,但是象结构体这样类型的值,如何知道呢?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 RTTI(Runtime time information)相关的资料, 看看<<Inside VCL>>, <<delphi 6 开发人员指南>>. >>属性的值等已经基本实现你是怎么实现的? to:hongqi162(失踪的月亮)属性的值等已经基本实现你是怎么实现的?---------------------------对象的RTTI信息如下就是edtMemo运行期间通过我写的那个组件发送出来的信息Name = edtMemoTag = 0Left = 72Top = 16Width = 297Height = 21Cursor = 0Hint = HelpType = htContextHelpKeyword = HelpContext = 0TabStop = TrueAnchors = akLeft,akTopAutoSelect = TrueAutoSize = TrueBevelEdges = beLeft,beTop,beRight,beBottomBevelInner = bvRaisedBevelKind = bkNoneBevelOuter = bvLoweredBiDiMode = bdLeftToRightBorderStyle = bsSingleCharCase = ecNormalColor = -2147483643Constraints = 14242228Ctl3D = TrueDragCursor = -12DragKind = dkDragDragMode = dmManualEnabled = TrueFont = 14242188HideSelection = TrueImeMode = imDontCareImeName = MaxLength = 0OEMConvert = FalseParentBiDiMode = TrueParentColor = FalseParentCtl3D = TrueParentFont = TrueParentShowHint = TruePasswordChar = PopupMenu = 0ReadOnly = FalseShowHint = FalseTabOrder = 0Text = btnSendClick(Sender: TObject);Visible = True //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 支持机构体, //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。 Invoke 类型转换错误 如何通过pid发送消息? idhttp怎么获得访问网站已经生成的cookies 求设计方法!! 如何把一个字符串转换成BYTE数组啊? 如何用windows Api判断是不是主窗口? 哪位大侠有D7的Architect版 求DBGridEH控件顯示簡繁體問題----急!!! 关于使用delphi5的InternetExpress建立分布式Web应用系统的问题,请高手赐教! 用tmedioplay编过程序的请进。 今天汗流浃背的,想问一个关于TStatusBar简单的问题 请问一个问题?
看看<<Inside VCL>>, <<delphi 6 开发人员指南>>.
属性的值等已经基本实现
你是怎么实现的?
---------------------------对象的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
//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 支持机构体,
自管理的类型,比如长字符串、动态数组、接口、变体类型等,这个 Record
就有 RTTI 了,不过这些 RTTI 也仅仅包含这些信息而已,以便 Delphi 知道
在需要释放一个 Record 的空间时还需要做那些额外操作,如减少长字符串
的引用计数、释放动态数组、减少接口引用计数、释放变体类型等。准确的说
就是包含每一个需要生存期自管理的 Field 的类型,仅此而已,但却没有包含
更多的信息让你更“聪明”的操作该 Record。