public void GetItemInfo([In, MarshalAs(UnmanagedType.BStr)] string pstrName, [In, MarshalAs(UnmanagedType.U4)] uint dwReturnMask, [Out, MarshalAs(UnmanagedType.IUnknown)] out object item, IntPtr ppti) { if (GlobalMembers.ContainsKey(pstrName)) { item = GlobalMembers[pstrName]; } else { item = null; return; } if (ppti != IntPtr.Zero) { Marshal.WriteIntPtr(ppti, Marshal.GetITypeInfoForType(item.GetType())); } }