Example #1
0
        public static T MarshalNativeToManaged <T>(IntPtr pNativeData, Func <T> creator)
            where T : class
        {
            if (pNativeData == IntPtr.Zero)
            {
                return(null);
            }

            var instance = CppInstancePtr.ToManaged <T>(pNativeData);

            return(instance ?? creator());
        }
Example #2
0
        public virtual TTarget Cast <TTarget> (ICppObject instance) where TTarget : class
        {
            TTarget result;
            var     ptr = Cast(instance, typeof(TTarget));

            // Check for existing instance based on vtable ptr
            result = CppInstancePtr.ToManaged <TTarget> (ptr.Native);

            // Create a new wrapper if necessary
            if (result == null)
            {
                result = Activator.CreateInstance(typeof(TTarget), ptr) as TTarget;
            }

            return(result);
        }