private static int OnDuplcateUserData(int serial_number, IntPtr pNativeUserData) { int rc = 0; UserData ud = FromSerialNumber(serial_number); if (ud != null) { try { Type t = ud.GetType(); UserData new_ud = System.Activator.CreateInstance(t) as UserData; if (new_ud != null) { new_ud.m_serial_number = UserData.m_next_serial_number++; new_ud.m_pNativePointer = pNativeUserData; UserData.StoreInRuntimeList(new_ud); new_ud.OnDuplicate(ud); rc = new_ud.m_serial_number; } } catch (Exception ex) { Runtime.HostUtils.ExceptionReport(ex); } } return(rc); }
/// <summary> /// If the userdata is already in a different UserDataList, it /// will be removed from that list and added to this list. /// </summary> /// <param name="userdata">Data element.</param> /// <returns>Whether this operation succeeded.</returns> public bool Add(UserData userdata) { if (!(userdata is SharedUserDictionary)) { Type t = userdata.GetType(); System.Reflection.ConstructorInfo constructor = t.GetConstructor(System.Type.EmptyTypes); if (!t.IsPublic || constructor == null) { throw new ArgumentException("userdata must be a public class and have a parameterless constructor"); } } IntPtr pOnObject = m_parent.ConstPointer(); IntPtr pUserData = userdata.NonConstPointer(true); const bool detachIfNeeded = true; bool rc = UnsafeNativeMethods.ON_Object_AttachUserData(pOnObject, pUserData, detachIfNeeded); if (rc) { UserData.StoreInRuntimeList(userdata); } return(rc); }