1

それぞれに (少なくとも) 15 個の属性を持つ多くのクラスがあり、すべての属性を含む文字列を返す関数を作成したいと考えています。簡単な方法は、各クラスに this 関数を追加することです。

Public function getAllAttributes(instance as Object) as String
 Dim str as String
 str = str & “**”& instance. Attribute1 & .... &“**”&  instance. Attribute100
 getAllAttributes = str
End function

しかし、私はすべてのクラスで動作する関数を構築したいです(擬似コードのアイデアは:)

Public function getAllAttributes(instance as Object) as String
 ‘function that handles all classes
 Dim str as String
 For att in instance 
    Str = str & “**”&  att.value
 Next
 getAllAttributes = str
End function

typelib 情報参照を使用しましたが、属性名だけを取得できました。

ありがとう。

4

1 に答える 1

3

見つけた。

プロジェクトへの参照として TypeLib 情報を追加します。

次に、次の 2 つの関数を使用します。

Public Function CharExecution(pObject As Object) As String
    CharExecution = “”
    Dim TLI         As TLIApplication
    Dim lInterface  As InterfaceInfo
    Dim lMember     As MemberInfo

    Set TLI = New TLIApplication
    Set lInterface = TLI.InterfaceInfoFromObject(pObject)

    Set ClassInfo = TLI.InterfaceInfoFromObject(pObject)
    Set FilteredMembers = ClassInfo.Members.GetFilteredMembers

    For Each lMember In lInterface.Members
        If WhatIsIt(lMember) = "Property Get" Then
            CharExecution = CharExecution & "*****" & lMember.Name & " : " & TLI.InvokeHook(pObject, lMember.Name, INVOKE_PROPERTYGET)
        End If
    Next
    Set pObject = Nothing
    Set lInterface = Nothing
    Set TLI = Nothing        
  End Function

   '================================================================================

 Private Function WhatIsIt(lMember As Object) As String
  Select Case lMember.InvokeKind
    Case INVOKE_FUNC
        If lMember.ReturnType.VarType <> VT_VOID Then
            WhatIsIt = "Function"
        Else
            WhatIsIt = "Method"
        End If
    Case INVOKE_PROPERTYGET
        WhatIsIt = "Property Get"
    Case INVOKE_PROPERTYPUT
        WhatIsIt = "Property Let"
    Case INVOKE_PROPERTYPUTREF
        WhatIsIt = "Property Set"
    Case INVOKE_CONST
        WhatIsIt = "Const"
    Case INVOKE_EVENTFUNC
        WhatIsIt = "Event"
    Case Else
        WhatIsIt = lMember.InvokeKind & " (Unknown)"
 End Select
End Function

次のように呼び出します。

  MsgBox CharExecution( classInstanceName)

または

  MsgBox CharExecution(New ClassName)

ありがとう 。

于 2013-10-26T08:08:29.617 に答える