Unfortunately the dump-object function only lists methods & properties which were exported properly as publicly accessible. Some COM assemblies didn't follow the rules everywhere (actually it's more like most of them didn't), so some of these properties aren't listed normally.Thanks Irneb , thank you a lot .
Though there is the tlbinf32.dll which can interrogate even such mis-created assemblies. And thanks to MP a very nice AutoLisp function to make use of it: http://www.theswamp.org/index.php?topic=19890.25
(vl-load-com)
;;
(defun registry-interface-classes (/ l b lst f)
(setq l (vl-registry-descendents "HKEY_CLASSES_ROOT\\Interface"))
(vl-file-delete "C:\\InterfaceClasses.txt")
(setq f (open "C:\\InterfaceClasses.txt" "w"))
(foreach a l
(setq b (vl-registry-read (strcat "HKEY_CLASSES_ROOT\\Interface" "\\" a)))
(if (and b (not (vl-position b lst)))
(setq lst (cons b lst))))
(foreach a (setq lst (reverse lst))
(write-line a f))
(close f)
)
;;(registry-interface-classes)
(defun registry-interface-classes-base (/ l b lst f)
(setq l (vl-registry-descendents "HKEY_CLASSES_ROOT"))
(vl-file-delete "C:\\InterfaceClassesBase.txt")
(setq f (open "C:\\InterfaceClassesBase.txt" "w"))
(foreach a l
(setq b (vl-registry-read (strcat "HKEY_CLASSES_ROOT" "\\" a)))
(if (and b (not (vl-position b lst)))
(setq lst (cons b lst))))
(foreach a (setq lst (reverse lst))
(write-line a f))
(close f)
lst
)
(defun registry-interface-classes-name (/ l f)
(setq l (vl-registry-descendents "HKEY_CLASSES_ROOT"));_(length (vl-remove-if (function (lambda (a) (or (= a "*") (wcmatch a "`.*"))))(vl-registry-descendents "HKEY_CLASSES_ROOT")))
(vl-file-delete "C:\\InterfaceClassesObjectName.txt")
(setq f (open "C:\\InterfaceClassesBObjectName.txt" "w"))
(foreach a l
(write-line a f))
(close f)
)
;; (registry-interface-classes-name)
;; (registry-interface-classes-base)
;; (vlax-dump-object (vla-getInterfaceObject (vlax-get-acad-object) "TapiMigPlugin.MigrationPlugin.1"))
(defun c:IFOTest (/ l l1 cad obj lst f)
;; through the interface object Test
(setq l (registry-interface-classes-base))
(setq cad (vlax-get-acad-object))
(foreach a l
(setq a (vl-string-subst "." " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (setq lst (cons a lst))
(vlax-release-object obj))
(setq obj nil))
)
(vlax-release-object cad)
(if lst
(progn
(vl-file-delete "c:\\IFOTest0.txt")
(setq f (open "c:\\IFOTest0.txt" "w"))
(foreach a lst
(write-line a f))
(close f)))
(princ (strcat "\n" (rtos (length lst) 2 0) " Interface Object Can be use , See C:\IFOTest.txt ."))
(princ)
)
(defun c:IFOTest0 (/ l i cad obj f)
;; through the interface object Test
(setq f0 (open "C:\\InterfaceClassesBObjectName.txt" "r"))
(repeat (* 0 1024)
(read-line f0))
(setq cad (vlax-get-acad-object))
(setq f (open "c:\\IFOTest1.txt" "a")
i 0)
(repeat 1024
(setq a (read-line f0))
(if (and a (vl-every (function not) (list (= a "*") (wcmatch a "`.*") (= (vl-string-trim " " a) ""))))
(progn
(setq a (vl-string-subst "_" " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (write-line a f)
(vlax-release-object obj)
(setq i (1+ i)))
(princ (strcat "\n" a " " (vl-catch-all-error-message obj)))
)))
(gc)
)
(vlax-release-object cad)
(close f)
(princ (strcat "\n" (rtos i 2 0) " Interface Object Can be use , See C:\IFOTest1.txt ."))
(princ)
)
;;
(defun c:IFOTest1 (/ l i cad obj f)
;; through the interface object Test
(setq f0 (open "C:\\InterfaceClassesBObjectName.txt" "r"))
(repeat (* 1 1024)
(read-line f0))
(setq cad (vlax-get-acad-object))
(setq f (open "c:\\IFOTest1.txt" "a")
i 0)
(repeat 1024
(setq a (read-line f0))
(if (and a (vl-every (function not) (list (= a "*") (wcmatch a "`.*") (= (vl-string-trim " " a) ""))))
(progn
(setq a (vl-string-subst "_" " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (write-line a f)
(vlax-release-object obj)
(setq i (1+ i)))
(princ (strcat "\n" a " " (vl-catch-all-error-message obj)))
)))
(gc)
)
(vlax-release-object cad)
(close f)
(princ (strcat "\n" (rtos i 2 0) " Interface Object Can be use , See C:\IFOTest1.txt ."))
(princ)
)
(defun c:IFOTest2 (/ l i cad obj f)
;; through the interface object Test
(setq f0 (open "C:\\InterfaceClassesBObjectName.txt" "r"))
(repeat (* 2 1024)
(read-line f0))
(setq cad (vlax-get-acad-object))
(setq f (open "c:\\IFOTest1.txt" "a")
i 0)
(repeat 1024
(setq a (read-line f0))
(if (and a (vl-every (function not) (list (= a "*") (wcmatch a "`.*") (= (vl-string-trim " " a) ""))))
(progn
(setq a (vl-string-subst "_" " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (write-line a f)
(vlax-release-object obj)
(setq i (1+ i)))
(princ (strcat "\n" a " " (vl-catch-all-error-message obj)))
)))
(gc)
)
(vlax-release-object cad)
(close f)
(princ (strcat "\n" (rtos i 2 0) " Interface Object Can be use , See C:\IFOTest1.txt ."))
(princ)
)
(defun c:IFOTest3 (/ l i cad obj f)
;; through the interface object Test
(setq f0 (open "C:\\InterfaceClassesBObjectName.txt" "r"))
(repeat (* 3 1024)
(read-line f0))
(setq cad (vlax-get-acad-object))
(setq f (open "c:\\IFOTest1.txt" "a")
i 0)
(repeat 1024
(setq a (read-line f0))
(if (and a (vl-every (function not) (list (= a "*") (wcmatch a "`.*") (= (vl-string-trim " " a) ""))))
(progn
(setq a (vl-string-subst "_" " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (write-line a f)
(vlax-release-object obj)
(setq i (1+ i)))
(princ (strcat "\n" a " " (vl-catch-all-error-message obj)))
)))
(gc)
)
(vlax-release-object cad)
(close f)
(princ (strcat "\n" (rtos i 2 0) " Interface Object Can be use , See C:\IFOTest1.txt ."))
(princ)
)
(defun c:IFOTest4 (/ l i cad obj f)
;; through the interface object Test
(setq f0 (open "C:\\InterfaceClassesBObjectName.txt" "r"))
(repeat (* 4 1024)
(read-line f0))
(setq cad (vlax-get-acad-object))
(setq f (open "c:\\IFOTest1.txt" "a")
i 0)
(repeat 1024
(setq a (read-line f0))
(if (and a (vl-every (function not) (list (= a "*") (wcmatch a "`.*") (= (vl-string-trim " " a) ""))))
(progn
(setq a (vl-string-subst "_" " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (write-line a f)
(vlax-release-object obj)
(setq i (1+ i)))
(princ (strcat "\n" a " " (vl-catch-all-error-message obj)))
)))
(gc)
)
(vlax-release-object cad)
(close f)
(princ (strcat "\n" (rtos i 2 0) " Interface Object Can be use , See C:\IFOTest1.txt ."))
(princ)
)
(defun c:IFOTest5 (/ l i cad obj f)
;; through the interface object Test
(setq f0 (open "C:\\InterfaceClassesBObjectName.txt" "r"))
(repeat (* 5 1024)
(read-line f0))
(setq cad (vlax-get-acad-object))
(setq f (open "c:\\IFOTest1.txt" "a")
i 0)
(repeat 1024
(setq a (read-line f0))
(if (and a (vl-every (function not) (list (= a "*") (wcmatch a "`.*") (= (vl-string-trim " " a) ""))))
(progn
(setq a (vl-string-subst "_" " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (write-line a f)
(vlax-release-object obj)
(setq i (1+ i)))
(princ (strcat "\n" a " " (vl-catch-all-error-message obj)))
)))
(gc)
)
(vlax-release-object cad)
(close f)
(princ (strcat "\n" (rtos i 2 0) " Interface Object Can be use , See C:\IFOTest1.txt ."))
(princ)
)
(defun c:IFOTest6 (/ l i cad obj f)
;; through the interface object Test
(setq f0 (open "C:\\InterfaceClassesBObjectName.txt" "r"))
(repeat (* 6 1024)
(read-line f0))
(setq cad (vlax-get-acad-object))
(setq f (open "c:\\IFOTest1.txt" "a")
i 0)
(repeat 1024
(setq a (read-line f0))
(if (and a (vl-every (function not) (list (= a "*") (wcmatch a "`.*") (= (vl-string-trim " " a) ""))))
(progn
(setq a (vl-string-subst "_" " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (write-line a f)
(vlax-release-object obj)
(setq i (1+ i)))
(princ (strcat "\n" a " " (vl-catch-all-error-message obj)))
)))
(gc)
)
(vlax-release-object cad)
(close f)
(princ (strcat "\n" (rtos i 2 0) " Interface Object Can be use , See C:\IFOTest1.txt ."))
(princ)
)
(defun c:IFOTest7 (/ l i cad obj f)
;; through the interface object Test
(setq f0 (open "C:\\InterfaceClassesBObjectName.txt" "r"))
(repeat (* 7 1024)
(read-line f0))
(setq cad (vlax-get-acad-object))
(setq f (open "c:\\IFOTest1.txt" "a")
i 0)
(repeat 1024
(setq a (read-line f0))
(if (and a (vl-every (function not) (list (= a "*") (wcmatch a "`.*") (= (vl-string-trim " " a) ""))))
(progn
(setq a (vl-string-subst "_" " " a))
(setq obj (vl-catch-all-apply (function vla-getInterfaceObject) (list cad a)))
(if (not (vl-catch-all-error-p obj))
(progn (write-line a f)
(vlax-release-object obj)
(setq i (1+ i)))
(princ (strcat "\n" a " " (vl-catch-all-error-message obj)))
)))
(gc)
)
(vlax-release-object cad)
(close f)
(princ (strcat "\n" (rtos i 2 0) " Interface Object Can be use , See C:\IFOTest1.txt ."))
(princ)
)
(defun c:IFOTestD(/ f0 lst f)
(setq f0 (open "c:\\IFOTest1.txt" "r"))
(while (setq a (read-line f0))
(if (not (vl-position a lst))
(setq lst (cons a lst))))
(close f0)
(setq lst (acad_strlsort lst))
(vl-file-delete "C:\\IFOTest.txt")
(setq f (open "C:\\IFOTest.txt" "w"))
(foreach a lst
(write-line a f))
(close f)
(princ)
)