Microsoft Office Forums

Go Back   Microsoft Office Forums > >

Reply
 
Thread Tools Display Modes
  #1  
Old 06-25-2014, 07:59 AM
whatsup whatsup is offline Slow "comparison/replace" script Windows 7 64bit Slow "comparison/replace" script Office 2010 32bit
Competent Performer
 
Join Date: May 2014
Posts: 137
whatsup will become famous soon enough
Default

I see your correction, but you still left out an important thing:


Quote:
If Mem_ReadHex_Words(lng_varPtr, 4) doesn't point anymore to
HexPtr(lng_objPtr, 4)
That's especially important for object-variables which are set to an object like "As Worksheet". That's because the lng_ObjPtr we obtain from objwks is the same as we get from ObjPtr(Sheet1). Since Sheet1 still exists when we check afterwards, it doesn't tell if the reference hold by VarPtr(objwks) has been released.

I have to come back on the example in my file for Run11_clsTest(). It actually doesn't show that the class got destroyed. I made an attempt to obtain the VarPtr and ObjPtr for Class1, but it didn't work therefore I left it. Now I figured it out:
Class1:
Code:
Public Sub Class_Initialize()
     Debug.Print "Class1 is initialized"
    
lng_objcls1 = ObjPtr(Me)
lng_varcls1 = VarPtr(Me)
    pointerToSomething "objClass1", lng_varcls1, lng_objcls1, coBytes
 End Sub
I still don't know why
Code:
lng_objcls1 = ObjPtr(Class1)
isn't accepted, but with "Me" it works.
Checking on these datas afterwards, it shows properly that the class gets terminated:
Mod11_Class:
Code:
Sub Run11_clsTest()
 Do_Header "Running Test_Class..."
Test_Class
    DoEvents
    Debug.Print "After Runtime"
    pointerToSomething "objcls1", lng_varPtr, lng_objPtr, coBytes
    pointerToSomething "objClass1", lng_varcls1, lng_objcls1, coBytes
    
End Sub
Quote:
Im building a class module now to encapsulate this stuff to make it more convenient to deploy....
I don't get what exactly you are after, but I guess you will surprise me again
Reply With Quote
  #2  
Old 06-25-2014, 08:57 AM
CoolBlue's Avatar
CoolBlue CoolBlue is offline Slow "comparison/replace" script Windows 7 64bit Slow "comparison/replace" script Office 2013
Advanced Beginner
 
Join Date: Jun 2014
Location: Australia
Posts: 40
CoolBlue is on a distinguished road
Default

Quote:
Originally Posted by whatsup View Post
I see your correction, but you still left out an important thing:
That's especially important for object-variables which are set to an object like "As Worksheet". That's because the lng_ObjPtr we obtain from objwks is the same as we get from ObjPtr(Sheet1). Since Sheet1 still exists when we check afterwards, it doesn't tell if the reference hold by VarPtr(objwks) has been released.
Yes, I see what you mean... I got myself confused trying to explain it. Unfortunately my time to edit it has expired already.
Quote:
Originally Posted by whatsup View Post
I have to come back on the example in my file for Run11_clsTest()....
I still don't know why
Code:
lng_objcls1 = ObjPtr(Class1)
isn't accepted, but with "Me" it works.
Its because Class1 is not an object, its a Class template if you like.
ObjPtr(Class1) is like VarPtr(LongPtr) or ObjPtr(Collection)
These are semantic representations of definitions of data structures, not objects. But, yep, that is what the Me statement is for. It refers to the particular instance of the object of type Class1. So every instance of type Class1 has its own "Me"... a pointer to itself. But a Class cannot have a pointer to itself, coz it's not an object, only a definition of a type of object.

I'n not sure what VarPtr(Me) is though... I can't figure that on out and the contents of that location are zero. That one is making my head spin

Quote:
Originally Posted by whatsup View Post
I don't get what exactly you are after, but I guess you will surprise me again
Well, we will see... I'm struggling with it.
I am hoping to have something like this...
Code:
Sub testObj()
Const objBytes As Long = 32
Dim o As clReferrence
Dim lObj As Worksheet

    Set gwks = Worksheets(1)
    
    Set lObj = gwks
    Set o = New clReferrence
    o.initObject objBytes, lObj
    
    Debug.Print "Address:  " & o.Address & vbTab & "Contents:  " & o.Contents
    Debug.Print "pAddress: " & o.pAddress & vbTab & "pContents: " & o.pContents

End Sub
But its hard to pass a reference to lobj (in other words VarPtr(lobj)) into the clReferrence object. VBA tends to resolve the reference all the way to gwks and the address of the local variable is discarded when you pass it into the Class Object.
Reply With Quote
  #3  
Old 06-25-2014, 04:48 PM
whatsup whatsup is offline Slow "comparison/replace" script Windows 7 64bit Slow "comparison/replace" script Office 2010 32bit
Competent Performer
 
Join Date: May 2014
Posts: 137
whatsup will become famous soon enough
Default

Quote:
These are semantic representations of definitions of data structures, not objects. But, yep, that is what the Me statement is for. It refers to the particular instance of the object of type Class1
Yes you're right of course, I missed that one instead was trying to treat the class as any class else (UserForm, Chart-Sheet, ...).

Quote:
I'n not sure what VarPtr(Me) is though... I can't figure that on out and the contents of that location are zero. That one is making my head spin
Interesting observation, but probably related to what you said above. Still we can make it visible, what's going on:
Code:
Private Sub Test_Class()
Dim objcls1 As Class1
    
Set objcls1 = New Class1
lng_objPtr = ObjPtr(objcls1)
lng_varPtr = VarPtr(objcls1)
    
    pointerToSomething "objcls1", lng_varPtr, lng_objPtr, coBytes
'Since VarPtr(Me) obtained in the class shows Zero check again:
    pointerToSomething "objClass1", lng_varcls1, lng_objcls1, coBytes

 Set objcls1 = Nothing

 If objcls1 Is Nothing Then
    Debug.Print vbTab & "Object is set to nothing"
Else
    Debug.Print vbTab & "Object wasn't cleared before leaving Sub"
End If
     pointerToSomething "objcls1", lng_varPtr, ObjPtr(objcls1), coBytes
    
End Sub
On the debug-print you can see that the Initialize-Event is triggered on
Code:
Set objcls = New Class1
but objcls isn't yet set. The class is assigned a pointer, whereas the VarPtr at this stage doesn't point anywhere but Zero, but the ObjPtr contains the vtable (methods, ...) of Class1 (and whatever else comes with the class).
With ObjPtr(Me) established objcls next is assigned a pointer VarPtr which points to the instance of Class1, and at this stage also VarPtr(Me) gets the reference. Pretty sure it's just a inside thing why it is like that. One explanation might be, that this way, in case the Set of objcls fails it's easier to release memory (but that's just a home-made explanation).

But as you already said some time ago, this part isn't that important. In the moment I'm doing some examples with various objects. When it comes to charts, that's rather confusing. It's somehow weird, which pointer (VarPtr) suddenly points to another object, though I expect it pointing to yet another object.
But that's only a thing of memory management, and we don't have to dive deeper, as long at the end the references show that they got removed.

As for the other part:
I leave you struggling, assuming if you don't get it working I won't either. The snippet of the code anyway leaves too much to guess.
Reply With Quote
Reply



Similar Threads
Thread Thread Starter Forum Replies Last Post
Wierd "script code" in a downloaded .doc file CNBarnes Word 2 10-18-2012 02:07 AM
Slow "comparison/replace" script replace data from variable with "sub and super script" from excel to word by vba krishnaoptif Word VBA 9 06-22-2012 05:08 AM
Slow "comparison/replace" script How to choose a "List" for certain "Heading" from "Modify" tool? Jamal NUMAN Word 2 07-03-2011 03:11 AM
Rules and Alerts: "run a script"? discountvc Outlook 0 06-15-2010 07:36 AM
An "error has occurred in the script on this page" decann Outlook 8 09-03-2009 08:54 AM

Other Forums: Access Forums

All times are GMT -7. The time now is 04:21 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Search Engine Optimisation provided by DragonByte SEO (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
MSOfficeForums.com is not affiliated with Microsoft