VB.NET提供了反射类来枚举对象类型的所有属性和方法列表,请问在VB.6里如何实现?
有个网友告诉我用"TypeLib Information"库,但是我没有找到这个具体的类型库?到底怎么做?
请指教!
非常感谢!

解决方案 »

  1.   

    引用TypeLib Information  TLBINF32.DLLOption Explicit
    Private Sub Command1_Click()
        iterateMembers Text1
    End Sub
    Sub iterateMembers(obj As Object)
        Dim TLI As New TLIApplication, ret As Variant
        Dim interface As InterfaceInfo
        Dim member As MemberInfo    On Error Resume Next
        Set interface = TLI.InterfaceInfoFromObject(obj)
        Dim index As Long, tempstr As String
        ReDim str(interface.Members.Count) As String    index = 0
        For Each member In interface.Members
            tempstr = ""
            tempstr = tempstr & member.Name & vbTab & member.VTableOffset & vbTab & Hex$(member.MemberId) & _
                    vbTab & member.HelpString
            'get property value; using memberID is faster than member.Name
            ret = TLI.InvokeHook(Text1, member.MemberId, INVOKE_PROPERTYGET)
            'adjust long values; convert to hex (else shows neg value)
            If TypeName(ret) = "Long" Then
                ret = "&H" & Hex(ret) & "&"
                tempstr = tempstr & vbTab & ret & vbTab & "long"
            Else
                tempstr = tempstr & vbTab & ret & vbTab & TypeName(ret)
            End If
            'store row data in array
            str(index) = tempstr
            index = index + 1    Next    Set TLI = Nothing
        fillGrid str()
    End SubSub fillGrid(str() As String)
        Dim x As Long
        'grid routine--------------------------------------------
        MSFlexGrid1.Visible = False
        Me.MSFlexGrid1.Clear
        MSFlexGrid1.Rows = 1 'interface.Members.Count
        '6 data items;Property;Vtable;memberID;Helpstring;Value;Type
        MSFlexGrid1.Cols = 6
        MSFlexGrid1.ColWidth(3) = 3080
        MSFlexGrid1.ColWidth(4) = 1200
        'setup fixed columm headers
        Me.MSFlexGrid1.TextArray(0 * 4 + 0) = "Property"
        Me.MSFlexGrid1.TextArray(0 * 4 + 1) = "VtableOffset"
        Me.MSFlexGrid1.TextArray(0 * 4 + 2) = "MemberID"
        Me.MSFlexGrid1.TextArray(0 * 4 + 3) = "Help String"
        Me.MSFlexGrid1.TextArray(0 * 4 + 4) = "Value"
        Me.MSFlexGrid1.TextArray(0 * 4 + 5) = "Type"
        'from fixed row add item
        '_Default is repeated twice; x ->x-1; minor wrinkle
        For x = 1 To UBound(str()) - 1 'interface.Members.Count - 1
            MSFlexGrid1.AddItem str(x), x
        Next x
        MSFlexGrid1.Visible = TrueEnd Sub
    Private Sub Command2_Click()
        iterateMembers Label1
    End SubPrivate Sub Command3_Click()
        iterateMembers Command4
    End SubPrivate Sub Command5_Click()
        iterateMembers Me.Check1
    End SubPrivate Sub Command6_Click()
        iterateMembers Me.Option1
    End SubPrivate Sub Command7_Click()
        iterateMembers Me.Combo1
    End SubPrivate Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        MSFlexGrid1.ToolTipText = MSFlexGrid1.TextMatrix(MSFlexGrid1.MouseRow, MSFlexGrid1.MouseCol)End SubSub takestr(str() As String)
    Dim x As Long
    For x = 0 To UBound(str())
    MsgBox str(x)
    Next
    End Sub