Author: David Zimmer
Date: 01.17.23 - 7:12pm
Finally getting around to playing with DispCallFunc to call class methods on VB objects (including private functions in the vtable).
I was having problems getting return values and some weirdness when trying to use it from VB. Using it from VB directly adds an extra layer of confusion because of the VB6 Api Declare translation of things.
So I ditched that and went to using a vb6 class called from C where you have explicit control of the arguments without any translation layer involved.
Now I can take another run at doing it from VB or devise an alternative strategy with more explicit control.
I have created a github gist with the code.
This coupled with the ability to enumerate all live class instances in a running vb6 executable will be pretty interesting.
For public methods you dont need this, you can use the remote scripting trick
Coupled with the data output from vbdec it will be a cake walk.
I would still like to implement a thing in vbdec to enum all live class instances, and then show all the public variables values with option to call public and private methods with user args. We are almost there.
There is also some embedded information about private variables held at the class and module level. It may only be for variable types which require cleanup such as objects, arrays, and strings. Not fully sure yet. Way nicer than having to scan teh disasm for references though. Still studying these. They can be found below ObjInfo.PublicBytes and ObjInfo.ModulePublic. Static bytes does the same thing, talked about it somewhere. Anyway one of them holds type information, the other the actual data I Believe.
Update: the live classes/ref count/pub vars UI is already out. This could actually be a handy profiling tool for any VB6 developer.