'引用TypeLib Infomation Private Sub Command2_Click() Dim oTLInfo As TypeLibInfo Dim oMemInfo As MemberInfo Dim sDllName As String Dim sOrdinal As Integer Dim s As String
Set oTLInfo = TLI.TypeLibInfoFromFile("MSVBVM60.DLL") For Each oMemInfo In oTLInfo.TypeInfos.NamedItem("Math").Members With oMemInfo Select Case .InvokeKind Case INVOKE_CONST s = s & "CONST " Case INVOKE_EVENTFUNC s = s & "EVENT " Case INVOKE_FUNC s = s & "FUNCTION " Case INVOKE_PROPERTYGET s = s & "PROPERTY " Case INVOKE_PROPERTYPUT s = s & "PROPERTY " Case INVOKE_PROPERTYPUTREF s = s & "PROPERTY " Case INVOKE_UNKNOWN s = s & "UNKNOWN " End Select
s = s & .Name
If .Parameters.Count <> 0 Then s = s & "( " For Each pt In .Parameters s = s & pt.Name & " AS " & pt.VarTypeInfo & " 代码略, " Next
s = Left(s, Len(s) - 2) & ")" & Chr(10) End If .GetDllEntry sDllName, vbNullString, sOrdinal s = s & sDllName & "." & "Math" & " 成员" & Chr(10) s = s & .HelpString End With MsgBox s s = "" Next End Sub
如果函数是被装饰过的C++函数的话,可以用depends 2.0来看,或用装饰名来自己读函数的参数
如果函数是被装饰过的C __stdcall或__fastcall函数的话,装饰名最后一个@字符以后是参数所占的字节数。不过要看参数的类型等还是要反汇编。
对于其他函数大概只能用反汇编了把。
Private Sub Command2_Click()
Dim oTLInfo As TypeLibInfo
Dim oMemInfo As MemberInfo
Dim sDllName As String
Dim sOrdinal As Integer
Dim s As String
Set oTLInfo = TLI.TypeLibInfoFromFile("MSVBVM60.DLL")
For Each oMemInfo In oTLInfo.TypeInfos.NamedItem("Math").Members
With oMemInfo
Select Case .InvokeKind
Case INVOKE_CONST
s = s & "CONST "
Case INVOKE_EVENTFUNC
s = s & "EVENT "
Case INVOKE_FUNC
s = s & "FUNCTION "
Case INVOKE_PROPERTYGET
s = s & "PROPERTY "
Case INVOKE_PROPERTYPUT
s = s & "PROPERTY "
Case INVOKE_PROPERTYPUTREF
s = s & "PROPERTY "
Case INVOKE_UNKNOWN
s = s & "UNKNOWN "
End Select
s = s & .Name
If .Parameters.Count <> 0 Then
s = s & "( "
For Each pt In .Parameters
s = s & pt.Name & " AS " & pt.VarTypeInfo & " 代码略, "
Next
s = Left(s, Len(s) - 2) & ")" & Chr(10)
End If
.GetDllEntry sDllName, vbNullString, sOrdinal
s = s & sDllName & "." & "Math" & " 成员" & Chr(10)
s = s & .HelpString
End With
MsgBox s
s = ""
Next
End Sub
hhjjhjhj(大头) 的方法很好但只适用于 dll 库。