View Single Post
 
Old 06-20-2014, 03:49 AM
CoolBlue's Avatar
CoolBlue CoolBlue is offline Windows 7 64bit Office 2013
Advanced Beginner
 
Join Date: Jun 2014
Location: Australia
Posts: 40
CoolBlue is on a distinguished road
Default Slow "comparison/replace" script

Try this instead...

Code:
Option Explicit
Public lng_VarPtr As Long
Public lng_ObjPtr As Long
  
 #If Win64 Then
    Public Const PTR_LENGTH As Long = 8
#Else
    Public Const PTR_LENGTH As Long = 4
#End If
 
Public Declare PtrSafe Sub Mem_Copy Lib "kernel32" Alias "RtlMoveMemory" ( _
    ByRef Destination As Any, _
    ByRef Source As Any, _
    ByVal Length As Long)
  
' Platform-independent method to return the full zero-padded
' hexadecimal representation of a pointer value
Function HexPtr(ByVal Ptr As LongPtr) As String
    HexPtr = Hex$(Ptr)
    HexPtr = String$((PTR_LENGTH * 2) - Len(HexPtr), "0") & HexPtr
End Function
 
Public Function Mem_ReadHex(ByVal Ptr As LongPtr, ByVal Length As Long) As String
    Dim bBuffer() As Byte, strBytes() As String, i As Long, ub As Long, b As Byte
    ub = Length - 1
    ReDim bBuffer(ub)
    ReDim strBytes(ub)
    Mem_Copy bBuffer(0), ByVal Ptr, Length
    For i = 0 To ub
        b = bBuffer(i)
        strBytes(i) = IIf(b < 16, "0", "") & Hex$(b)
    Next
    Mem_ReadHex = Join(strBytes, "")
End Function
 
Sub pionterToSomething(name As String, lng_Ptr As Long, Length As Long)
    Debug.Print name & " : 0x"; HexPtr(lng_Ptr); _
                                     " : 0x"; Mem_ReadHex(lng_Ptr, Length)
End Sub
Sub ExampleForScalar()
 
Dim lngValue As Long
    lngValue = &HAAAAAAAA
    lng_VarPtr = VarPtr(lngValue)
    pionterToSomething "lngValue", lng_VarPtr, 4
End Sub
   
Sub ExampleForObject()
Dim objRange As Object

    Set objRange = ActiveCell
    lng_ObjPtr = ObjPtr(objRange)                    
    pionterToSomething "objRange", lng_ObjPtr, 4

'Set objRange = Nothing
End Sub
Sub ObjectIsGone()
    Debug.Print
    ExampleForObject
    pionterToSomething "objRange", lng_ObjPtr, 4
End Sub
Sub ValueIsGone2()
    Debug.Print
    ExampleForScalar
    pionterToSomething "lngValue", lng_VarPtr, 4
End Sub

Last edited by CoolBlue; 06-20-2014 at 03:00 PM.
Reply With Quote