Author Topic: TLBINF32.DLL Upskirt  (Read 14289 times)

0 Members and 1 Guest are viewing this topic.

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
TLBINF32.DLL Upskirt
« on: November 16, 2007, 09:58:46 AM »
This is a one percent post (i.e. 99% of the peeps here won't be interested).

If one has a tool to expose the properties and methods (PAM) of arbitrary objects what's one of the first things one should do?

Use it to document the PAM of the tool used to expose said PAM. Ahhh, recursively beautiful, almost poetry you say, and perfect for a Friday.



#<VLA-OBJECT _TLIApplication 02d90b48> (vlax-create-object "TLI.TLIApplication")

    PROPERTIES

        (PROPERTY VALUE RETURNTYPE ACCESS VISIBILITY)

        ("InvokeLCID" 1024 I4 READWRITE NORMAL)
        ("ListBoxNotification" nil EMPTY READWRITE NORMAL)
        ("RecordField" "<Error: Invalid number of parameters>" VARIANT READWRITE NORMAL)
        ("ResolveAliases" -1 BOOL READWRITE NORMAL)

        Property(s) that take arguments:

            "RecordField" (("RecordVARIANT" VARIANT) ("FieldName" STR))

    METHODS

        (METHOD ARGUMENTS RETURNTYPE ACCESS)

        ("AddRef" nil UI4 RESTRICTED)
        ("ClassInfoFromObject" (("Object" UNKNOWN)) EMPTY NORMAL)
        ("GetIDsOfNames" (("riid" EMPTY) ("rgszNames" I1) ("cNames" UINT) ("lcid" UI4) ("rgdispid" I4)) VOID RESTRICTED)
        ("GetTypeInfo" (("itinfo" UINT) ("lcid" UI4) ("pptinfo" VOID)) VOID RESTRICTED)
        ("GetTypeInfoCount" (("pctinfo" UINT)) VOID RESTRICTED)
        ("InterfaceInfoFromObject" (("Object" DISPATCH)) EMPTY NORMAL)
        ("Invoke" (("dispidMember" I4) ("riid" EMPTY) ("lcid" UI4) ("wFlags" UI2) ("pdispparams" EMPTY) ("pvarResult" VARIANT) ("pexcepinfo" EMPTY) ("puArgErr" UINT)) VOID RESTRICTED)
        ("InvokeHook" (("Object" DISPATCH) ("NameOrID" VARIANT) ("InvokeKind" EMPTY)
        ("ReverseArgList" UNKNOWN)) VARIANT NORMAL)
        ("InvokeHookArray" (("Object" DISPATCH) ("NameOrID" VARIANT) ("InvokeKind" EMPTY) ("ReverseArgList" UNKNOWN)) VARIANT NORMAL)
        ("InvokeHookArraySub" (("Object" DISPATCH) ("NameOrID" VARIANT) ("InvokeKind" EMPTY) ("ReverseArgList" UNKNOWN)) VOID NORMAL)
        ("InvokeHookSub" (("Object" DISPATCH) ("NameOrID" VARIANT) ("InvokeKind" EMPTY) ("ReverseArgList" UNKNOWN)) VOID NORMAL)
        ("InvokeID" (("Object" DISPATCH) ("Name" STR)) I4 NORMAL)
        ("Me" nil EMPTY NORMAL)
        ("QueryInterface" (("riid" EMPTY) ("ppvObj" VOID)) VOID RESTRICTED)
        ("Release" nil UI4 RESTRICTED)
        ("TypeInfoFromITypeInfo" (("ptinfo" UNKNOWN)) EMPTY NORMAL)
        ("TypeInfoFromRecordVARIANT" (("RecordVARIANT" VARIANT)) EMPTY NORMAL)
        ("TypeLibInfoFromFile" (("FileName" STR)) EMPTY NORMAL)
        ("TypeLibInfoFromITypeLib" (("pITypeLib" UNKNOWN)) EMPTY NORMAL)
        ("TypeLibInfoFromRegistry" (("TypeLibGuid" STR) ("MajorVersion" I2)
        ("MinorVersion" I2) ("LCID" I4)) EMPTY NORMAL)
        ("_placeholder_destructor" nil VOID RESTRICTED)



#<VLA-OBJECT _SearchHelper 02d99708> (vlax-create-object "TLI.SearchHelper")

    PROPERTIES

        (PROPERTY VALUE RETURNTYPE ACCESS VISIBILITY)

        ("CheckHaveMatch" "<Error: Invalid number of parameters>" BOOL READONLY NORMAL)
        ("Init" "<Error: Invalid number of parameters>" VOID READONLY HIDDEN)

        Property(s) that take arguments:

            "CheckHaveMatch" (("Name" STR))
            "Init" (("SysKind" EMPTY) ("LCID" I4) ("GrowSize" I2 OPTIONAL))

    METHODS

        (METHOD ARGUMENTS RETURNTYPE ACCESS)

        ("AddRef" nil UI4 RESTRICTED)
        ("GetIDsOfNames" (("riid" EMPTY) ("rgszNames" I1) ("cNames" UINT) ("lcid" UI4)
        ("rgdispid" I4)) VOID RESTRICTED)
        ("GetTypeInfo" (("itinfo" UINT) ("lcid" UI4) ("pptinfo" VOID)) VOID RESTRICTED)
        ("GetTypeInfoCount" (("pctinfo" UINT)) VOID RESTRICTED)
        ("Invoke" (("dispidMember" I4) ("riid" EMPTY) ("lcid" UI4) ("wFlags" UI2)
        ("pdispparams" EMPTY) ("pvarResult" VARIANT) ("pexcepinfo" EMPTY) ("puArgErr"UINT)) VOID RESTRICTED)
        ("Me" nil EMPTY NORMAL)
        ("QueryInterface" (("riid" EMPTY) ("ppvObj" VOID)) VOID RESTRICTED)
        ("Release" nil UI4 RESTRICTED)
        ("_OldInit" nil VOID NORMAL)
        ("_placeholder_destructor" nil VOID RESTRICTED)



#<VLA-OBJECT _TypeLibInfo 02d90b78> (vlax-create-object "TLI.TypeLibInfo")

    PROPERTIES

        (PROPERTY VALUE RETURNTYPE ACCESS VISIBILITY)

        ("AppObjString" "" STR READWRITE NORMAL)
        ("AttributeMask" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I2 READONLY NORMAL)
        ("AttributeStrings" "<Error: Invalid number of parameters>" I2 READONLY NORMAL)
        ("BestEquivalentType" "<Error: Invalid number of parameters>" STR READONLY NORMAL)
        ("CoClasses" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("Constants" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("ContainingFile" "" STR READWRITE NORMAL)
        ("CustomDataCollection" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("Declarations" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("GUID" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
        ("GetTypeInfo" "<Error: Invalid number of parameters>" EMPTY READONLY NORMAL)
        ("GetTypeInfoNumber" "<Error: Invalid number of parameters>" I2 READONLY NORMAL)
        ("GetTypeKind" "<Error: Invalid number of parameters>" EMPTY READONLY NORMAL)
        ("HelpContext" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I4 READONLY NORMAL)
        ("HelpFile" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
        ("HelpString" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
        ("HelpStringContext" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I4 READONLY NORMAL)
        ("HelpStringDll" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
        ("ITypeLib" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" UNKNOWN READWRITE HIDDEN)
        ("Interfaces" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("IntrinsicAliases" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("LCID" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I4 READONLY NORMAL)
        ("LibNum" 0 I2 READWRITE NORMAL)
        ("MajorVersion" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I2 READONLY NORMAL)
        ("MinorVersion" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I2 READONLY NORMAL)
        ("Name" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" STR READONLY NORMAL)
        ("Records" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("SearchDefault" 239 EMPTY READWRITE NORMAL)
        ("ShowLibName" 0 BOOL READWRITE NORMAL)
        ("SysKind" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("TypeInfoCount" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" I2 READONLY NORMAL)
        ("TypeInfos" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("Unions" "<Error: TLI: No current typelib.  Use the ContainingFile property or LoadRegTypeLib method to load a current typelib.>" EMPTY READONLY NORMAL)
        ("_OldGetTypeKind" "<Error: Member not found>" VOID READONLY NORMAL)
        ("_OldHelpString" "<Error: Member not found>" VOID READONLY NORMAL)
        ("_OldSysKind" "<Error: Member not found>" VOID READONLY NORMAL)

        Property(s) that take arguments:

            "AttributeStrings" (("AttributeArray" UNKNOWN))
            "GetTypeInfo" (("Index" VARIANT))
            "GetTypeInfoNumber" (("Name" STR))
            "GetTypeKind" (("TypeInfoNumber" I2))
            "HelpString" (("LCID" I4 OPTIONAL))
            "HelpStringDll" (("LCID" I4 OPTIONAL))
            "BestEquivalentType" (("TypeInfoName" STR))

    METHODS

        (METHOD ARGUMENTS RETURNTYPE ACCESS)

        ("AddRef" nil UI4 RESTRICTED)
        ("AddTypes" (("TypeInfoNumbers" UNKNOWN) ("StartResults" EMPTY OPTIONAL)
        ("SearchType" EMPTY OPTIONAL) ("Sort" BOOL OPTIONAL)) EMPTY NORMAL)
        ("AddTypesDirect" (("TypeInfoNumbers" UNKNOWN) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL)) I2 NORMAL)
        ("CaseMemberName" (("bstrName" STR) ("SearchType" EMPTY OPTIONAL)) BOOL NORMAL)
        ("CaseTypeName" (("bstrName" STR) ("SearchType" EMPTY OPTIONAL)) EMPTY NORMAL)
        ("FreeSearchCriteria" nil VOID NORMAL)
        ("GetIDsOfNames" (("riid" EMPTY) ("rgszNames" I1) ("cNames" UINT) ("lcid" UI4)
        ("rgdispid" I4)) VOID RESTRICTED)
        ("GetMemberInfo" (("SearchData" I4) ("InvokeKinds" EMPTY OPTIONAL) ("MemberId" I4 OPTIONAL) ("MemberName" STR OPTIONAL)) EMPTY NORMAL)
        ("GetMembers" (("SearchData" I4) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
        ("GetMembersDirect" (("SearchData" I4) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("ItemDataType" EMPTY OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) I2 NORMAL)
        ("GetMembersWithSubString" (("SubString" STR) ("StartResults" EMPTY OPTIONAL)
        ("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL) ("Helper" EMPTY OPTIONAL) ("Sort" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
        ("GetMembersWithSubStringDirect" (("SubString" STR) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL)
        ("Helper" EMPTY OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) I2 NORMAL)
        ("GetMembersWithSubStringEx" (("SubString" STR) ("InvokeGroupings" ARRAY)
        ("StartResults" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL) ("Sort" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
        ("GetTypeInfo" (("itinfo" UINT) ("lcid" UI4) ("pptinfo" VOID)) VOID RESTRICTED)
        ("GetTypeInfoCount" (("pctinfo" UINT)) VOID RESTRICTED)
        ("GetTypes" (("StartResults" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL)
        ("Sort" BOOL OPTIONAL)) EMPTY NORMAL)
        ("GetTypesDirect" (("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL)) I2 NORMAL)
        ("GetTypesWithMember" (("MemberName" STR) ("StartResults" EMPTY OPTIONAL)
        ("SearchType" EMPTY OPTIONAL) ("Sort" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
        ("GetTypesWithMemberDirect" (("MemberName" STR) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) I2 NORMAL)
        ("GetTypesWithMemberEx" (("MemberName" STR) ("InvokeKind" EMPTY)
        ("StartResults" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("Sort" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) EMPTY NORMAL)
        ("GetTypesWithSubString" (("SubString" STR) ("StartResults" EMPTY OPTIONAL)
        ("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL) ("Sort" BOOL OPTIONAL)) EMPTY NORMAL)
        ("GetTypesWithSubStringDirect" (("SubString" STR) ("hWnd" INT) ("WindowType" EMPTY OPTIONAL) ("SearchType" EMPTY OPTIONAL) ("SearchMiddle" BOOL OPTIONAL)) I2 NORMAL)
        ("Invoke" (("dispidMember" I4) ("riid" EMPTY) ("lcid" UI4) ("wFlags" UI2)
        ("pdispparams" EMPTY) ("pvarResult" VARIANT) ("pexcepinfo" EMPTY) ("puArgErr" UINT)) VOID RESTRICTED)
        ("IsSameLibrary" (("CheckLib" EMPTY)) BOOL NORMAL)
        ("LoadRegTypeLib" (("TypeLibGuid" STR) ("MajorVersion" I2) ("MinorVersion" I2)
        ("LCID" I4)) VOID NORMAL)
        ("MakeSearchData" (("TypeInfoName" STR) ("SearchType" EMPTY OPTIONAL)) I4 NORMAL)
        ("Me" nil EMPTY NORMAL)
        ("QueryInterface" (("riid" EMPTY) ("ppvObj" VOID)) VOID RESTRICTED)
        ("Register" (("HelpDir" STR OPTIONAL)) VOID NORMAL)
        ("Release" nil UI4 RESTRICTED)
        ("ResetSearchCriteria" (("TypeFilter" EMPTY OPTIONAL) ("IncludeEmptyTypes" BOOL OPTIONAL) ("ShowUnderscore" BOOL OPTIONAL)) VOID NORMAL)
        ("SetMemberFilters" (("FuncFilter" EMPTY OPTIONAL) ("VarFilter" EMPTY OPTIONAL)) VOID NORMAL)
        ("UnRegister" nil VOID NORMAL)
        ("_OldAddClassTypeToList" nil VOID RESTRICTED)
        ("_OldCaseMemberName" nil VOID RESTRICTED)
        ("_OldCaseTypeName" nil VOID RESTRICTED)
        ("_OldFillMemberList" nil VOID RESTRICTED)
        ("_OldFillTypesCombo" nil VOID RESTRICTED)
        ("_OldFillTypesList" nil VOID RESTRICTED)
        ("_OldGetMembersWithSubString" nil VOID RESTRICTED)
        ("_OldGetTypesWithMember" nil VOID RESTRICTED)
        ("_OldGetTypesWithSubString" nil VOID RESTRICTED)
        ("_OldResetSearchCriteria" nil VOID RESTRICTED)
        ("_placeholder_destructor" nil VOID RESTRICTED)



Now you have the knowledge to do everything I'm doing.

:)
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst

deegeecees

  • Guest
Re: TLBINF32.DLL Upskirt
« Reply #1 on: November 16, 2007, 10:00:30 AM »
Dude, you scare me sometimes. :)

Maverick®

  • Seagull
  • Posts: 14778
Re: TLBINF32.DLL Upskirt
« Reply #2 on: November 16, 2007, 10:01:55 AM »
Phhhhht!

Title tease!!  :pissed:

mkweaver

  • Bull Frog
  • Posts: 352
Re: TLBINF32.DLL Upskirt
« Reply #3 on: November 16, 2007, 10:46:36 AM »
This is a one percent post (i.e. 99% of the peeps here won't be interested).

If one has a tool to expose the properties and methods (PAM) of arbitrary objects what's one of the first things one should do?

Use it to document the PAM of the tool used to expose said PAM. Ahhh, recursively beautiful, almost poetry you say, and perfect for a Friday.

... snip ...

Now you have the knowledge to do everything I'm doing.

:)

LOL  I love it!

T.Willey

  • Needs a day job
  • Posts: 5251
Re: TLBINF32.DLL Upskirt
« Reply #4 on: November 16, 2007, 11:08:36 AM »
With a tool like this, then who knows what trouble a Lisper could get into.  What program couldn't one automate from Acad?  Makes one think......

Nice work Michael!
Tim

I don't want to ' end-up ', I want to ' become '. - Me

Please think about donating if this post helped you.

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
Re: TLBINF32.DLL Upskirt
« Reply #5 on: November 16, 2007, 08:12:14 PM »
Thanks for the kindly comments guys!

Nice work Michael!

Thank you Tim.

LOL I love it!

Glad to hear Mike. :)

Phhhhht!

Title tease!!

Ha ha, got a "civilian" to look, lol.   :evil:

Dude, you scare me sometimes.

{shrugs}  :lol:
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst

Kerry

  • Mesozoic relic
  • Seagull
  • Posts: 11654
  • class keyThumper<T>:ILazy<T>
Re: TLBINF32.DLL Upskirt
« Reply #6 on: November 16, 2007, 08:17:44 PM »

talk about exposing PAM and 'UpSkirts' raises the interest level a little higher than 1:100 methinks :lol:
kdub, kdub_nz in other timelines.
Perfection is not optional.
Everything will work just as you expect it to, unless your expectations are incorrect.
Discipline: None at all.

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
Re: TLBINF32.DLL Upskirt
« Reply #7 on: November 16, 2007, 09:03:55 PM »
talk about exposing PAM and 'UpSkirts' raises the interest level a little higher than 1:100 methinks :lol:

I imagine it's but a matter of time before Se7en admonishes me for said title.
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst

It's Alive!

  • Retired
  • Needs a day job
  • Posts: 8698
  • AKA Daniel
Re: TLBINF32.DLL Upskirt
« Reply #8 on: November 16, 2007, 09:47:29 PM »

talk about exposing PAM and 'UpSkirts' raises the interest level a little higher than 1:100 methinks :lol:

 :lmao:

JohnK

  • Administrator
  • Seagull
  • Posts: 10637
Re: TLBINF32.DLL Upskirt
« Reply #9 on: November 17, 2007, 11:41:08 AM »
This is a one percent post (i.e. 99% of the peeps here won't be interested).

If one has a tool to expose the properties and methods (PAM) of arbitrary objects what's one of the first things one should do?

Use it to document the PAM of the tool used to expose said PAM. Ahhh, recursively beautiful, almost poetry you say, and perfect for a Friday.

<snip>

Now you have the knowledge to do everything I'm doing.

:)

Joke: What has two thumbs and doesn't quite understand this? .... *Both thumbs up and in a jabbing motion points to chest* Dis guy!

No, I think this is a one percent post because 99% wont understand it; needless to say im a bit confused. I googled the .dll in question and started to understand its purposes but ... phew! I got more reading to do before I can toss out a "cool stuff mang!". My head is spinning. No, I take that back because I think I understand enough about the general concept --building your own lib browser (Its the start of a "big board" from "Snow Crash"!!)-- so I think i can comfortably throw out a "Dude!! Your good!". AND I think I can also appreciate the thought process involved with the start of all this so I can also toss out a "Ah huh?! Okay, right. ...You know your way up there and im still way down here right?!".

Funny how you say that I now have the knowledge to do everything your doing cause that couldn't be further from the truth. This post might as well be in hex right now.

Im gonna go away now cause my head hurts a little.

OBTW, you can get a free pass from the title admonishing this time, because you confused and awed me enough to have Jenny ask "what's wrong?" (I guess I was staring or something.).
TheSwamp.org (serving the CAD community since 2003)
Member location map - Add yourself

Donate to TheSwamp.org

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
Re: TLBINF32.DLL Upskirt
« Reply #10 on: November 17, 2007, 12:29:26 PM »
Hi John. I didn't mean to confuse anyone; it was posted for anyone who had been following my attempts to exploit the interrogation abilities of TLBINF32.DLL AND have an interest in TBLINF32.DLL's, errrm, under carriage. Perhaps it was too presumptuous of me to assume folks were tracking said progress on this task, so I'll try to recap without writing a novel.

Our friend mkweaver started a thread in the VBA forum titled "List of object properties to an array?", where he inquired how one might dynamically determine all the properties for an object and place them into an array.

Our friend SomeCallMeDave chimed in with this great post and said one could use TLBINF32.DLL to interrogate an object to dynamically determine its properties.

Yours truly recognized this could also be done from lisp, promptly soiled his self, and went off laughing maniacally into the lab to see what he could concoct.

After a lot of experimenting, sledge hammer techniques and throw away code, I produced a couple of routines that while not ready for prime time, faithfully interrogated objects and dynamically revealed properties and methods, complete with argument names and data types. Having achieved this I thought the logical thing I should do for the community is document TLBINF32.DLL from a LISPer's perspective so those scant individuals who might be interested in following this particular tangent on their own might be armed with a road map; something I didn't have when I started, and with which I could have recovered a long weekend of frenzied effort had I had it at the ready.

If it's of no value to you just ignore it, like I said, it's a 1% post.

:P



Edit: Meh, fixed typos and links.
« Last Edit: November 17, 2007, 12:41:12 PM by MP »
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst

JohnK

  • Administrator
  • Seagull
  • Posts: 10637
Re: TLBINF32.DLL Upskirt
« Reply #11 on: November 17, 2007, 12:53:27 PM »
Figure of speech; I think its great. I just have a lot of reading to do. I can see this being of great value when and if i ever get around to trying to work with the AutoCAD MEP Aec objects again. I imagine this will be used in my Revit programing as well.

Your post was fine (just over my head right at this moment). I will not ignore it; i will peruse it and will report back with any of my code as usual.

Now i have to go get a new coffee grinder cause mine craped out this morning and im a bit fuzzy headed still so i will do some research later today.

Later,
TheSwamp.org (serving the CAD community since 2003)
Member location map - Add yourself

Donate to TheSwamp.org

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
Re: TLBINF32.DLL Upskirt
« Reply #12 on: November 17, 2007, 01:05:42 PM »
I can see this being of great value when and if i ever get around to trying to work with the AutoCAD MEP Aec objects again.

If running outside of MEP Aec. et al make sure you have the applicable object enablers loaded. Otherwise you'll just have zombies which won't ante up much.

I imagine this will be used in my Revit programing as well.

Can't comment on Revit, but If you have successes interrogating Revit objects using TLBINF32.DLL bet there would be a lot of folks interested in seeing your implementation.
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst

JohnK

  • Administrator
  • Seagull
  • Posts: 10637
Re: TLBINF32.DLL Upskirt
« Reply #13 on: November 17, 2007, 03:33:49 PM »
So far all the stuff ive done for MEP Aec stuff ante up to be garbage so i will take anything i get. Heck, ive even resorted to try building the ent lists and trying entmod (and such) with plain autolisp  ... Ive all but given up on MEP objects.

Yeah, Revit programing is my next big thing to tackle. Well C# is, but i wanted to do that right and take all the into courses Microsoft has to offer first so that kinda thing might be at least a few months away.
TheSwamp.org (serving the CAD community since 2003)
Member location map - Add yourself

Donate to TheSwamp.org

Keith™

  • Villiage Idiot
  • Seagull
  • Posts: 16899
  • Superior Stupidity at its best
Re: TLBINF32.DLL Upskirt
« Reply #14 on: November 17, 2007, 07:43:59 PM »
Michael, I have been using the TBLINF32.DLL for some time now to get the information I needed to dynamically register and unregister COM objects for an application I created. Essentially the code I have written using this little gem allows my application to load other COM application into its memory segment and utilize said application as an add-in, much like the add-ins in Word and other applications with the ability to have users create add-ins. In my application, the user is free to utilize any language they wish that can be compiled into a DLL or EXE without regard to my application. It gives new meaning to interoperability. Surely there is more than 1% that will make use of this tidbit of information.

I hadn't thought of utilizing it in lisp ... cool ...thanks for sharing.
Proud provider of opinion and arrogance since November 22, 2003 at 09:35:31 am
CadJockey Militia Field Marshal

Find me on https://parler.com @kblackie

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
Re: TLBINF32.DLL Upskirt
« Reply #15 on: November 18, 2007, 10:48:41 AM »
Interesting stuff Keith!

How does using tlbinf32.dll for registering / unregistering dlls differ compared to regsvr32.exe, aside from the latter being command line based?

Also, whenever one creates and instance of classes hosted in activex (com) dlls they are run in the parent's memory space (i.e. in process servers) so how does invoking classes thru tlbinf32.dll differ?

Thanks for the interesting comments and nod Keith.
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst

Keith™

  • Villiage Idiot
  • Seagull
  • Posts: 16899
  • Superior Stupidity at its best
Re: TLBINF32.DLL Upskirt
« Reply #16 on: November 19, 2007, 05:51:57 AM »
Interesting stuff Keith!

How does using tlbinf32.dll for registering / unregistering dlls differ compared to regsvr32.exe, aside from the latter being command line based?

As you are probably aware, not all classes can be registered using regsvr32.exe i.e you get that dreaded dll entry point not found error, so, using the tblinf32.dll, you can suss out just which type of COM application you have, and based upon the results register the dll appropriately.


Also, whenever one creates and instance of classes hosted in activex (com) dlls they are run in the parent's memory space (i.e. in process servers) so how does invoking classes thru tlbinf32.dll differ?

Thanks for the interesting comments and nod Keith.

Depending upon the way the class is invoked it may run out of process ... I have seen some really crazy stuff done ... anyway, by knowing exactly the type of class I am dealing with, I can use appropriate calling methods for each, thus ensuring the class runs in-process.
Proud provider of opinion and arrogance since November 22, 2003 at 09:35:31 am
CadJockey Militia Field Marshal

Find me on https://parler.com @kblackie

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
Re: TLBINF32.DLL Upskirt
« Reply #17 on: November 19, 2007, 09:50:48 AM »
As you are probably aware, not all classes can be registered using regsvr32.exe i.e you get that dreaded dll entry point not found error, so, using the tblinf32.dll, you can suss out just which type of COM application you have, and based upon the results register the dll appropriately.

Be interesting if you could share a small sample or even psuedo code.

Depending upon the way the class is invoked it may run out of process ... I have seen some really crazy stuff done ... anyway, by knowing exactly the type of class I am dealing with, I can use appropriate calling methods for each, thus ensuring the class runs in-process.

I must have the most horse blinder experience, because in all my years instanciating classes hosted in activex dlls I have never had one attempt to run out of process. Mind you, I never polled the system either to determine if an object was attempting to run out of process, so maybe I'm simply oblivious. Reflecting for a nano second ... yeah, the latter.
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst

Keith™

  • Villiage Idiot
  • Seagull
  • Posts: 16899
  • Superior Stupidity at its best
Re: TLBINF32.DLL Upskirt
« Reply #18 on: November 19, 2007, 08:16:31 PM »
As you are probably aware, not all classes can be registered using regsvr32.exe i.e you get that dreaded dll entry point not found error, so, using the tblinf32.dll, you can suss out just which type of COM application you have, and based upon the results register the dll appropriately.

Be interesting if you could share a small sample or even psuedo code.

I'll look and see if I have anything I can post .. I am sure you appreciate since it was for a client, I must be very careful about posting code.

Depending upon the way the class is invoked it may run out of process ... I have seen some really crazy stuff done ... anyway, by knowing exactly the type of class I am dealing with, I can use appropriate calling methods for each, thus ensuring the class runs in-process.

I must have the most horse blinder experience, because in all my years instanciating classes hosted in activex dlls I have never had one attempt to run out of process. Mind you, I never polled the system either to determine if an object was attempting to run out of process, so maybe I'm simply oblivious. Reflecting for a nano second ... yeah, the latter.

Have you ever created an ActiveX EXE that uses classes that are only available to the executable i.e. MyClass.exe is the only program that can register the application class .. since ActiveX EXE programs are generally self registering, (at least the ones I have dealt with), and unregistering in some cases, it means that if you wish to register the class, you have to be able to execute the program ... if you execute the program, your options are limited as to how you can do that, such as calling the program using ShellExecute. To my knowledge, ShellExecute runs the new program in its own memory space, thus marshalling takes its toll on data gathering between the programs ... also sometimes you find an ActiveX exe that has been renamed to something else such as MyApp.dll or MyApp.dat. In those instances, the user must know what kind of program he is dealing with as regsvr32 does not work with ActiveX exes.

Ideally, everyone would follow the same methodology and we would be able to handle all classes the same, but until then, I'll have to utilize gathering the type library information from the file i.e. is it an application or dll? what are the exposed classes? shoot ... are there any exposed classes?

Is that a little bit clearer? Perhaps I am doing something unnecessary ... but it has always been my understanding that if you run an app using ShellExecute, then it runs in its own memory space ... maybe I am wrong ..
Proud provider of opinion and arrogance since November 22, 2003 at 09:35:31 am
CadJockey Militia Field Marshal

Find me on https://parler.com @kblackie

MP

  • Seagull
  • Posts: 17750
  • Have thousands of dwgs to process? Contact me.
Re: TLBINF32.DLL Upskirt
« Reply #19 on: November 19, 2007, 10:59:53 PM »
I'll look and see if I have anything I can post .. I am sure you appreciate since it was for a client, I must be very careful about posting code.

Have you ever created an ActiveX EXE that uses classes that are only available to the executable i.e. MyClass.exe is the only program that can register the application class .. since ActiveX EXE programs are generally self registering, (at least the ones I have dealt with), and unregistering in some cases, it means that if you wish to register the class, you have to be able to execute the program ... if you execute the program, your options are limited as to how you can do that, such as calling the program using ShellExecute. To my knowledge, ShellExecute runs the new program in its own memory space, thus marshalling takes its toll on data gathering between the programs ... also sometimes you find an ActiveX exe that has been renamed to something else such as MyApp.dll or MyApp.dat. In those instances, the user must know what kind of program he is dealing with as regsvr32 does not work with ActiveX exes.

Ideally, everyone would follow the same methodology and we would be able to handle all classes the same, but until then, I'll have to utilize gathering the type library information from the file i.e. is it an application or dll? what are the exposed classes? shoot ... are there any exposed classes?

Is that a little bit clearer? Perhaps I am doing something unnecessary ... but it has always been my understanding that if you run an app using ShellExecute, then it runs in its own memory space ... maybe I am wrong ..

I can't count how many ActiveX dlls and traditional executables (that may reference ActiveX dlls) I've authored over the years but I don't write ActiveX executables (or documents for that matter). This is largely because the applications I've authored have to be as fast as possible (but they say, then why VB?) and out of process ActiveX servers (exes) are typically slower than their equivalent in process servers. While it's certainly not fair to throw the baby out with the wash I can't think of any of my ActiveX dll solutions that would have benefited from being external, but again, I'll make reference back to my horse blinder comment in the preceding.

Having said all that it is an interesting and important discussion; the merits of what you've done are quite significant, even to me, because even tho I don't author out of process servers, I do use them. For example, Word, Excel, IExplore etc. can all serve as out of process servers. Also, the discussion made me revisit the merits of the different kinds of ActiveX servers, something I've not done since the early 90s.

Interesting stuff Keith, you never disappoint -- thanks.
Engineering Technologist • CAD Automation Practitioner
Automation ▸ Design ▸ Drafting ▸ Document Control ▸ Client
cadanalyst@gmail.comhttp://cadanalyst.slack.comhttp://linkedin.com/in/cadanalyst

hermanm

  • Guest
Re: TLBINF32.DLL Upskirt
« Reply #20 on: December 31, 2007, 10:28:11 PM »
Or, you could read the manufacturer's documentation, if you don't mind "translating" from VB to LISP.

http://support.microsoft.com/kb/224331

You might also be interested in this link:

http://www.jsware.net/jsware/vbcode.php3

d/l tlbread.zip & have a look at TLB Readme.txt contained therein

thx for heads up on this topic:)

Atook

  • Swamp Rat
  • Posts: 1029
  • AKA Tim
Re: TLBINF32.DLL Upskirt
« Reply #21 on: April 25, 2009, 01:51:59 AM »
I'm no LISP guy, but I'm interested in creating an ActiveX dll that exposes and object model that's got all the hydraulic object smarts built into it. LISP would just be used to populate the model, run a couple methods, then retrieve the calculated data.

It's a little late, and I'm a bit fuzzy, but this looks like precisely what I'm looking for. Using the vlax lisp calls, is it possible to essentially make LISP object aware to any ActiveX dll?

Or is there a better/easier way to make LISP object aware?

Sorry to bring this thread back from the dead..

I gotta say though, the 1% here kicks ass. :)