anchor.diff:    |Some(interfaceAnnotations) ->
       let apl = appendLine sb
       apl "\
  -extern crate iid;
  -extern crate d3d12_sys;
  -use iid::*;
  +use iid::{HasIID, HResult, IUnknownVtbl, drop_com_ptr, clone_com_ptr};
   use d3d12_sys::*;
  +use ::std::ptr::{null, null_mut};
  +use ::std::mem::size_of_val;
  +use ::libc::c_void;
   
   // Utility function. 
   // Compares lengths of slices in Option<&[T]> 
   // returns Ok(len) if all present slices have length len (or 0 if there's no arrays), 
  -           Err(()) is arrays have different lengths.
  -fn same_length<T>(arrs:&[Option<&[T]>]) -> Result<usize, ()> {
  +//         Err(()) is arrays have different lengths.
  +fn same_lenght<T>(arrs:&[Option<&[T]>]) -> Result<usize, ()> {
       let res=arrs.iter().fold(Ok(None), 
           |sz, arr| { 
               match sz { 
  
positive.code:       else
          sb.AppendLine("#[repr(C)]") |> ignore
          if sfields.IsEmpty then
            sb.AppendFormat("struct {0};",name).AppendLine() |> ignore;
          else
            sb.AppendFormat("struct {0} {{",name).AppendLine() |> ignore;
            for CStructElem(fname,fty,None) in sfields do
              sb.AppendFormat("  {0} : {1},", fname, tyToRust fty).AppendLine() |> ignore
            sb.AppendLine("}").AppendLine() |> ignore
  
negative.code: pub struct %s(*mut *mut IUnknownVtbl);
  
  pub impl HasIID for %s {
    fn iid() -> &'static IID { &IID_I%s }
    fn new(ppVtbl : *mut *mut IUnknownVtbl) -> Self { %s(ppVtbl) }
    fn expose_iptr(&self) -> *mut *mut IUnknownVtbl { self.0 }
  }
  
  pub impl Drop for %s {
    fn drop(&mut self) {
      drop_com_ptr(self)
    }
  }
  
  pub impl Clone for %s {
    fn clone(&self) -> Self {
      clone_com_ptr(self)
    }
  }
  
  pub impl %s {
  %s
  }
  "          iname iname iname iname iname iname iname (generateMethods methods)
  
      sb.ToString()
    |None -> 
  