public WeakReference(T target) { _managedWeakReference = new System.WeakReference <T>(target); if (target is object && ComWrappersSupport.TryUnwrapObject(target, out var objRef)) { _nativeWeakReference = target.As <IWeakReferenceSource>().GetWeakReference(); } }
private static object ResolveNativeWeakReference(IWeakReference reference) { if (reference is null) { return(null); } using var resolved = reference.Resolve(typeof(IUnknownVftbl).GUID); return(ComWrappersSupport.CreateRcwForComObject(resolved.ThisPtr)); }
public void SetTarget(T target) { lock (_managedWeakReference) { _managedWeakReference.SetTarget(target); if (target is object && ComWrappersSupport.TryUnwrapObject(target, out _)) { _nativeWeakReference = target.As <IWeakReferenceSource>().GetWeakReference(); } } }