derived.bas

来自「VB圣经」· BAS 代码 · 共 53 行

BAS
53
字号
Attribute VB_Name = "modDerived"
'***************************************************************
' (c) Copyright 2000 Matthew J. Curland
'
' This file is from the CD-ROM accompanying the book:
' Advanced Visual Basic 6: Power Techniques for Everyday Programs
'   Author: Matthew Curland
'   Published by: Addison-Wesley, July 2000
'   ISBN: 0-201-70712-8
'   http://www.PowerVB.com
'***************************************************************
Option Explicit

Private Const cVTableSize As Long = 8
Private Type WrapVTable
    VTable(cVTableSize - 1) As Long
End Type
Private m_VTable As WrapVTable
Private m_pVTable As Long

Public Type BaseOverride
    BD As BlindDelegator
    pDerived As Long
End Type

Public Sub HookVTable(pBDVTable As Long)
    If m_pVTable = 0 Then
        With m_VTable
            CopyMemory .VTable(0), ByVal pBDVTable, 4 * cVTableSize
            .VTable(7) = FuncAddr(AddressOf OverrideMe)
            m_pVTable = VarPtr(.VTable(0))
        End With
    End If
    pBDVTable = m_pVTable
End Sub
Private Function OverrideMe(This As BaseOverride, retVal As String) As Long
Dim Derived As Derived
    'Make sure [out] param is NULL
    VBoost.AssignZero retVal
    
    On Error GoTo Error
    'Jump to friend function in derived class
    VBoost.AssignAddRef Derived, This.pDerived
    retVal = Derived.Base_OverrideMe
    Exit Function
Error:
    OverrideMe = MapError
End Function
Private Function FuncAddr(ByVal pfn As Long) As Long
    FuncAddr = pfn
End Function

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?