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)); }
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); }