public uint CFGetTypeID(IntPtr FromInstance) { return(CoreFoundation.CFGetTypeID(FromInstance)); }
protected override bool StorageTryGetValue( string key, Type valueType, TypeCode valueTypeCode, out object value) { using (var cfKey = new CFString(key)) { var valuePtr = CFPreferences.CopyValue( cfKey.Handle, applicationId.Handle, CFPreferences.kCFPreferencesCurrentUser, CFPreferences.kCFPreferencesAnyHost); if (valuePtr == IntPtr.Zero) { value = null; return(false); } var typeId = CoreFoundation.CFGetTypeID(valuePtr); if (typeId == CoreFoundation.CFTypeID.CFBoolean) { value = CFBoolean.ToBoolean(valuePtr); return(true); } if (typeId == CoreFoundation.CFTypeID.CFString) { using (var cfString = new CFString(valuePtr)) value = cfString.ToString(); return(true); } if (typeId == CoreFoundation.CFTypeID.CFNumber) { using (var cfNumber = new CFNumber(valuePtr)) { switch (cfNumber.Type) { case CFNumberType.SInt8: case CFNumberType.Char: value = valueTypeCode == TypeCode.Byte ? cfNumber.ToByte() : (object)cfNumber.ToSByte(); return(true); case CFNumberType.SInt16: case CFNumberType.Short: value = valueTypeCode == TypeCode.UInt16 ? cfNumber.ToUInt16() : (object)cfNumber.ToInt16(); return(true); case CFNumberType.SInt32: case CFNumberType.Int: case CFNumberType.Long: value = valueTypeCode == TypeCode.UInt32 ? cfNumber.ToUInt32() : (object)cfNumber.ToInt32(); return(true); case CFNumberType.SInt64: case CFNumberType.LongLong: case CFNumberType.CFIndex: case CFNumberType.NSInteger: value = valueTypeCode == TypeCode.UInt64 ? cfNumber.ToUInt64() : (object)cfNumber.ToInt64(); return(true); case CFNumberType.Float32: case CFNumberType.Float: value = cfNumber.ToSingle(); return(true); case CFNumberType.Float64: case CFNumberType.Double: case CFNumberType.CGFloat: value = cfNumber.ToDouble(); return(true); } } } if (typeId == CoreFoundation.CFTypeID.CFArray) { try { value = CFArray .FromCFStringArray(valuePtr) ?.ToArray(); return(value != null); } catch { value = null; return(false); } } value = null; return(false); } }