Example #1
0
        private static int OnDuplcateUserData(int serialNumber, IntPtr pNativeUserData)
        {
            int      rc = 0;
            UserData ud = FromSerialNumber(serialNumber);

            if (ud != null)
            {
                try
                {
                    Type     t      = ud.GetType();
                    UserData new_ud = Activator.CreateInstance(t) as UserData;
                    if (new_ud != null)
                    {
                        // 5 March 2020 S. Baer (RH-56767)
                        // This is user data created from C++ and it's lifetime is managed
                        // by C++. No need to let this have it's lifetime managed by the GC
                        GC.SuppressFinalize(new_ud);
                        new_ud.m_serial_number  = g_next_serial_number++;
                        new_ud.m_native_pointer = pNativeUserData;
                        StoreInRuntimeList(new_ud);
                        new_ud.OnDuplicate(ud);
                        rc = new_ud.m_serial_number;
                    }
                }
                catch (Exception ex)
                {
                    Runtime.HostUtils.ExceptionReport(ex);
                }
            }
            return(rc);
        }
Example #2
0
        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);
        }