anchor.diff:  
   (defvar *com-interface-types* (make-hash-table :test #'eq))
   
  -(defvar *interface-names* (make-hash-table :test #'eq))
  +(defvar *interface-names* (make-hash-table :test #'equalp))
   
   (defvar *pointer-to-interface-mapping* (make-weak-hash-table :test #'eql
                                            :weakness :value))
  
positive.code:                                                           (check-type iid iid)
                                                            name))
                              (eval-when (:compile-toplevel :load-toplevel :execute)
                                (setf (gethash ',name *interface-names*) ,iid))))
            ((consp iid) (destructuring-bind
                             (iid-name dw w1 w2 b1 b2 b3 b4 b5 b6 b7 b8) iid
                           `(progn (define-iid ,iid-name ,dw ,w1 ,w2
                                     ,b1 ,b2 ,b3 ,b4 ,b5 ,b6 ,b7 ,b8)
                                   (register-class-uuid ,name ,iid-name)
                                   (eval-when (:compile-toplevel :load-toplevel :execute)
                                     (setf (gethash ',name *interface-names*) ,iid-name))))))
         ,@(loop :with vtable-index = (length parent-methods)
               :for (method-name . method-spec) :in methods
               :for (method-def trampoline-def trampoline-name) =
  
negative.code:   (com-interface-pointer &0 :type pointer))
  
  (defun iid-is (name)
    (check-type name iid)
    (or (gethash name *interface-names*)
        (error 'windows-error :code error-no-interface)))
  
  (define-compiler-macro iid-is (&whole form name)
    (if (constantp name)
      `(quote ,(iid-is (eval name)))
      form))
  
  (define-immediate-type com-interface-type ()
  