1,486
社区成员
发帖
与我相关
我的任务
分享
'=====================类 : Class1===========
Public Function ABCDEFG()
MsgBox "OK"
End Function
'===========================================
'*******************************************
Option Explicit
Private Const IID_NULL As String = "{00000000-0000-0000-0000-000000000000}"
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim obj As Class1
Dim IDispatch As olelib.IDispatch
Dim DISPID As Long
Dim IID_NULL_UUID As UUID
Dim tmp As Long
Dim praram As olelib.DISPPARAMS
Dim exc As olelib.EXCEPINFO
Dim ivk As INVOKEKIND
Dim ti As ITypeInfo
Set obj = New Class1
Set IDispatch = obj
tmp = VarPtr(DISPID)
Call olelib.CLSIDFromString(IID_NULL, IID_NULL_UUID)
'这两句,可以实现CallByName()
Call IDispatch.GetIDsOfNames(IID_NULL_UUID, "ABCDEFG", 1, GetUserDefaultLCID(), tmp)
IDispatch.Invoke tmp, IID_NULL_UUID, GetUserDefaultLCID, DISPATCH_METHOD, praram, DISPID, exc, tmp
Debug.Print IDispatch.GetTypeInfo(0, GetUserDefaultLCID()).AddressOfMember(tmp, INVOKE_FUNC)
' tmp = Poke(DISPID)
obj.ABCDEFG
Set IDispatch = Nothing
Set obj = Nothing
End Sub
'*******************************************