public JavaScriptObject CreateExternalObject(object externalData, JavaScriptExternalObjectFinalizeCallback finalizeCallback)
        {
            ExternalObjectThunkData thunk = new ExternalObjectThunkData()
            {
                callback = finalizeCallback, engine = new WeakReference <JavaScriptEngine>(this), userData = new WeakReference <object>(externalData),
            };
            GCHandle handle = GCHandle.Alloc(thunk);

            externalObjects_.Add(thunk);

            JavaScriptValueSafeHandle result;

            Errors.ThrowIfIs(api_.JsCreateExternalObject(GCHandle.ToIntPtr(handle), FinalizerCallbackPtr, out result));

            return(CreateObjectFromHandle(result));
        }
Beispiel #2
0
        public JavaScriptObject CreateExternalObject(object externalData, JavaScriptExternalObjectFinalizeCallback finalizeCallback)
        {
            if (externalObjectsDict.TryGetValue(externalData, out var obj))
            {
                return(obj);
            }

            ExternalObjectThunkData thunk = new ExternalObjectThunkData()
            {
                callback = finalizeCallback, engine = engineWeakReference, userDataStrong = externalData, order = ++lastExternalObjectId                                                             /*, userData = new WeakReferenceStruct<object>(externalData),*/
            };
            GCHandle handle = GCHandle.Alloc(thunk);

            strongGCHandles.Add(handle);
            externalObjects_.Add(thunk);

            JavaScriptValueSafeHandle result;

            Errors.ThrowIfIs(api_.JsCreateExternalObject(GCHandle.ToIntPtr(handle), FinalizerCallbackPtr, out result));

            obj = CreateObjectFromHandle(result);
            externalObjectsDict.Add(externalData, obj);
            return(obj);
        }
        public JavaScriptObject CreateExternalObject(object externalData, JavaScriptExternalObjectFinalizeCallback finalizeCallback)
        {
            ExternalObjectThunkData thunk = new ExternalObjectThunkData() { callback = finalizeCallback, engine = new WeakReference<JavaScriptEngine>(this), userData = new WeakReference<object>(externalData), };
            GCHandle handle = GCHandle.Alloc(thunk);
            externalObjects_.Add(thunk);

            ClaimContext();
            JavaScriptValueSafeHandle result;
            Errors.ThrowIfIs(api_.JsCreateExternalObject(GCHandle.ToIntPtr(handle), NativeCallbackPtr, out result));

            return CreateObjectFromHandle(result);
        }