Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB5,VB6
Expertise: Intermediate
Aug 26, 2000

GetMemberType - Check whether an object exposes a property, method, event

' Returns a bit-coded value that specifies the type of
' an object's member (property, method, event)
' or zero if the member isn't there

' Object is the object which you want to work
' MemberName is the property, method or event name
'
' the return value is one of the following
'   INVOKE_FUNC (method)
'   INVOKE_PROPERTYGET (property get)
'   INVOKE_PROPERTYPUT (property let)
'   INVOKE_PROPERTYPUTREF (property Set)
'   INVOKE_EVENTFUNC (event)
'   INVOKE_CONST (const)
'   256 is added to INVOKE_FUNC if the method is a function

' Be sure that "TypeLib Information" type library (TlbInf32.tlb)
' is referenced in your VB project.

Function GetMemberType(Object As Object, ByVal MemberName As String) As _
    InvokeKinds
    Dim TLI As New TLIApplication
    Dim Interface As InterfaceInfo
    Dim Member As MemberInfo
    
    ' get the default interface of the object
    ' any error is returned to the called
    Set Interface = TLI.InterfaceInfoFromObject(Object)
    
    ' from now on, errors just return 0
    On Error GoTo ErrorHandler
    
    ' search the property
    For Each Member In Interface.Members
        If StrComp(Member.Name, MemberName, vbTextCompare) = 0 Then
            ' add this bit to the result
            GetMemberType = GetMemberType Or Member.InvokeKind
            
            ' different behaviors, depending on member type
            Select Case Member.InvokeKind
                Case INVOKE_FUNC
                    ' it's a method - add 256 if it has a return value
                    If Member.ReturnType.VarType <> VT_VOID Then
                        GetMemberType = 256 Or INVOKE_FUNC
                    End If
                    ' nothing else to do
                    Exit For
                Case INVOKE_PROPERTYGET, INVOKE_PROPERTYPUT, _
                    INVOKE_PROPERTYPUTREF
                    ' it's a property - the result is bit coded
                    GetMemberType = GetMemberType Or Member.InvokeKind
                    ' we can't exit until all the members have been parsed
                Case Else
                    ' just return whatever value we found
                    GetMemberType = Member.InvokeKind
                    Exit For
            End Select
        End If
    Next
    
    Exit Function

ErrorHandler:
    ' an error occurred, return 0
    GetMemberType = 0
End Function

Alberto Falossi
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap