[src] Adjust numerous APIs to take/return NativeHandle instead of IntPtr for .NET. (#13488)
* [Foundation] Make numerous CFArray and NSArray APIs take/return NativeHandle instead of IntPtr. * [src] Fix a lot of other cases of IntPtr -> NativeHandle. This is just fallout from the CFArray/NSArray in the previous commit.
This commit is contained in:
Родитель
80dec2841f
Коммит
39ab97113c
|
@ -150,7 +150,7 @@ namespace AddressBook {
|
|||
get {return self.IsReadOnly;}
|
||||
}
|
||||
|
||||
IntPtr ToIntPtr (T value)
|
||||
NativeHandle ToIntPtr (T value)
|
||||
{
|
||||
var mutable = self as ABMutableMultiValue<T>;
|
||||
if (mutable is null)
|
||||
|
@ -216,8 +216,8 @@ namespace AddressBook {
|
|||
#endif
|
||||
public class ABMultiValue<T> : NativeObject, IEnumerable<ABMultiValueEntry<T>>
|
||||
{
|
||||
internal Converter<IntPtr, T> toManaged;
|
||||
internal Converter<T, IntPtr> toNative;
|
||||
internal Converter<NativeHandle, T> toManaged;
|
||||
internal Converter<T, NativeHandle> toNative;
|
||||
|
||||
internal ABMultiValue (NativeHandle handle, bool owns)
|
||||
: this (handle,
|
||||
|
@ -228,7 +228,7 @@ namespace AddressBook {
|
|||
throw new InvalidOperationException ("T must be an NSObject!");
|
||||
}
|
||||
|
||||
internal ABMultiValue (NativeHandle handle, Converter<IntPtr, T> toManaged, Converter<T, IntPtr> toNative, bool owns)
|
||||
internal ABMultiValue (NativeHandle handle, Converter<NativeHandle, T> toManaged, Converter<T, NativeHandle> toNative, bool owns)
|
||||
: base (handle, owns)
|
||||
{
|
||||
if (toManaged is null)
|
||||
|
@ -320,7 +320,7 @@ namespace AddressBook {
|
|||
{
|
||||
}
|
||||
|
||||
internal ABMutableMultiValue (NativeHandle handle, Converter<IntPtr, T> toManaged, Converter<T, IntPtr> toNative)
|
||||
internal ABMutableMultiValue (NativeHandle handle, Converter<NativeHandle, T> toManaged, Converter<T, NativeHandle> toNative)
|
||||
: base (handle, toManaged, toNative, false)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -853,7 +853,7 @@ namespace AddressBook {
|
|||
}
|
||||
}
|
||||
|
||||
internal static string ToString (IntPtr value)
|
||||
internal static string ToString (NativeHandle value)
|
||||
{
|
||||
return CFString.FromHandle (value)!;
|
||||
}
|
||||
|
@ -863,9 +863,9 @@ namespace AddressBook {
|
|||
return CreateStringMultiValue (CopyValue (ABPersonPropertyId.Email));
|
||||
}
|
||||
|
||||
static ABMultiValue<string>? CreateStringMultiValue (IntPtr handle)
|
||||
static ABMultiValue<string>? CreateStringMultiValue (NativeHandle handle)
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
return new ABMultiValue<string> (handle, ABPerson.ToString, CFString.CreateNative, true);
|
||||
}
|
||||
|
@ -912,16 +912,16 @@ namespace AddressBook {
|
|||
}
|
||||
|
||||
// Obsolete
|
||||
static ABMultiValue<NSDictionary>? CreateDictionaryMultiValue (IntPtr handle)
|
||||
static ABMultiValue<NSDictionary>? CreateDictionaryMultiValue (NativeHandle handle)
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
return new ABMultiValue<NSDictionary> (handle, true);
|
||||
}
|
||||
|
||||
static ABMultiValue<T>? CreateDictionaryMultiValue<T> (IntPtr handle, Func<NSDictionary, T> factory) where T : DictionaryContainer
|
||||
static ABMultiValue<T>? CreateDictionaryMultiValue<T> (NativeHandle handle, Func<NSDictionary, T> factory) where T : DictionaryContainer
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
|
||||
return new ABMultiValue<T> (handle,
|
||||
|
@ -935,9 +935,9 @@ namespace AddressBook {
|
|||
return CreateDateMultiValue (CopyValue (ABPersonPropertyId.Date));
|
||||
}
|
||||
|
||||
static ABMultiValue<NSDate>? CreateDateMultiValue (IntPtr handle)
|
||||
static ABMultiValue<NSDate>? CreateDateMultiValue (NativeHandle handle)
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
return new ABMultiValue<NSDate> (handle, true);
|
||||
}
|
||||
|
@ -1087,7 +1087,7 @@ namespace AddressBook {
|
|||
if (people is null)
|
||||
throw new ArgumentNullException (nameof (people));
|
||||
|
||||
var ptrs = new IntPtr [people.Length];
|
||||
var ptrs = new NativeHandle [people.Length];
|
||||
for (int i = 0; i < people.Length; ++i) {
|
||||
ptrs[i] = people[i].Handle;
|
||||
}
|
||||
|
|
|
@ -36,6 +36,10 @@ using ObjCRuntime;
|
|||
using Foundation;
|
||||
using CoreGraphics;
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace CoreAnimation {
|
||||
|
@ -47,7 +51,7 @@ namespace CoreAnimation {
|
|||
|
||||
public partial class CAGradientLayer {
|
||||
#if NET
|
||||
CGColor CreateColor (IntPtr p)
|
||||
CGColor CreateColor (NativeHandle p)
|
||||
#else
|
||||
public CGColor CreateColor (IntPtr p)
|
||||
#endif
|
||||
|
@ -66,7 +70,7 @@ namespace CoreAnimation {
|
|||
return;
|
||||
}
|
||||
|
||||
IntPtr [] ptrs = new IntPtr [value.Length];
|
||||
var ptrs = new NativeHandle [value.Length];
|
||||
for (int i = 0; i < ptrs.Length; i++)
|
||||
ptrs [i] = value [i].Handle;
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ namespace CoreFoundation {
|
|||
}
|
||||
}
|
||||
|
||||
internal static CFArray FromIntPtrs (params IntPtr[] values)
|
||||
internal static CFArray FromIntPtrs (params NativeHandle[] values)
|
||||
{
|
||||
return new CFArray (Create (values), true);
|
||||
}
|
||||
|
@ -96,16 +96,16 @@ namespace CoreFoundation {
|
|||
[DllImport (Constants.CoreFoundationLibrary)]
|
||||
internal extern static /* void* */ IntPtr CFArrayGetValueAtIndex (/* CFArrayRef */ IntPtr theArray, /* CFIndex */ nint idx);
|
||||
|
||||
public IntPtr GetValue (nint index)
|
||||
public NativeHandle GetValue (nint index)
|
||||
{
|
||||
return CFArrayGetValueAtIndex (GetCheckedHandle (), index);
|
||||
}
|
||||
|
||||
internal static unsafe IntPtr Create (params IntPtr[] values)
|
||||
internal static unsafe NativeHandle Create (params NativeHandle[] values)
|
||||
{
|
||||
if (values is null)
|
||||
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (values));
|
||||
fixed (IntPtr* pv = values) {
|
||||
fixed (NativeHandle* pv = values) {
|
||||
return CFArrayCreate (IntPtr.Zero,
|
||||
(IntPtr) pv,
|
||||
values.Length,
|
||||
|
@ -113,7 +113,7 @@ namespace CoreFoundation {
|
|||
}
|
||||
}
|
||||
|
||||
public static unsafe IntPtr Create (params INativeObject[] values)
|
||||
public static unsafe NativeHandle Create (params INativeObject[] values)
|
||||
{
|
||||
if (values is null)
|
||||
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (values));
|
||||
|
@ -125,7 +125,7 @@ namespace CoreFoundation {
|
|||
return CFArrayCreate (IntPtr.Zero, (IntPtr) pv, c, kCFTypeArrayCallbacks_ptr);
|
||||
}
|
||||
|
||||
public static unsafe IntPtr Create (params string [] values)
|
||||
public static unsafe NativeHandle Create (params string [] values)
|
||||
{
|
||||
if (values is null)
|
||||
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (values));
|
||||
|
@ -154,35 +154,35 @@ namespace CoreFoundation {
|
|||
internal extern static void CFArrayGetValues (/* CFArrayRef */ IntPtr theArray, CFRange range, /* const void ** */ IntPtr values);
|
||||
|
||||
// identical signature to NSArray API
|
||||
static unsafe public string?[]? StringArrayFromHandle (IntPtr handle)
|
||||
static unsafe public string?[]? StringArrayFromHandle (NativeHandle handle)
|
||||
{
|
||||
return ArrayFromHandleFunc (handle, CFString.FromHandle);
|
||||
}
|
||||
|
||||
static unsafe public string?[]? StringArrayFromHandle (IntPtr handle, bool releaseHandle)
|
||||
static unsafe public string?[]? StringArrayFromHandle (NativeHandle handle, bool releaseHandle)
|
||||
{
|
||||
var rv = StringArrayFromHandle (handle);
|
||||
if (releaseHandle && handle != IntPtr.Zero)
|
||||
if (releaseHandle && handle != NativeHandle.Zero)
|
||||
CFObject.CFRelease (handle);
|
||||
return rv;
|
||||
}
|
||||
|
||||
// identical signature to NSArray API
|
||||
static public T?[]? ArrayFromHandle<T> (IntPtr handle) where T : class, INativeObject
|
||||
static public T?[]? ArrayFromHandle<T> (NativeHandle handle) where T : class, INativeObject
|
||||
{
|
||||
var rv = ArrayFromHandleFunc<T> (handle, DefaultConvert<T>);
|
||||
return rv;
|
||||
}
|
||||
|
||||
static public T?[]? ArrayFromHandle<T> (IntPtr handle, bool releaseHandle) where T : class, INativeObject
|
||||
static public T?[]? ArrayFromHandle<T> (NativeHandle handle, bool releaseHandle) where T : class, INativeObject
|
||||
{
|
||||
var rv = ArrayFromHandle<T> (handle);
|
||||
if (releaseHandle && handle != IntPtr.Zero)
|
||||
if (releaseHandle && handle != NativeHandle.Zero)
|
||||
CFObject.CFRelease (handle);
|
||||
return rv;
|
||||
}
|
||||
|
||||
static T DefaultConvert<T> (IntPtr handle) where T: class, INativeObject
|
||||
static T DefaultConvert<T> (NativeHandle handle) where T: class, INativeObject
|
||||
{
|
||||
if (handle != CFNullHandle)
|
||||
return Runtime.GetINativeObject<T> (handle, false)!;
|
||||
|
@ -190,9 +190,9 @@ namespace CoreFoundation {
|
|||
}
|
||||
|
||||
// identical signature to NSArray API
|
||||
static public T[]? ArrayFromHandleFunc<T> (IntPtr handle, Func<IntPtr, T> createObject)
|
||||
static public T[]? ArrayFromHandleFunc<T> (NativeHandle handle, Func<NativeHandle, T> createObject)
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
|
||||
var c = (int) GetCount (handle);
|
||||
|
@ -212,7 +212,7 @@ namespace CoreFoundation {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static public T[]? ArrayFromHandleFunc<T> (IntPtr handle, Func<IntPtr, T> createObject, bool releaseHandle)
|
||||
static public T[]? ArrayFromHandleFunc<T> (NativeHandle handle, Func<NativeHandle, T> createObject, bool releaseHandle)
|
||||
{
|
||||
var rv = ArrayFromHandleFunc<T> (handle, createObject);
|
||||
if (releaseHandle && handle != IntPtr.Zero)
|
||||
|
|
|
@ -128,17 +128,17 @@ namespace CoreFoundation {
|
|||
[DllImport (Constants.CoreFoundationLibrary, CharSet=CharSet.Unicode)]
|
||||
extern static IntPtr CFStringGetCharacters (IntPtr handle, CFRange range, IntPtr buffer);
|
||||
|
||||
public static IntPtr CreateNative (string? value)
|
||||
public static NativeHandle CreateNative (string? value)
|
||||
{
|
||||
if (value is null)
|
||||
return IntPtr.Zero;
|
||||
return NativeHandle.Zero;
|
||||
|
||||
return CFStringCreateWithCharacters (IntPtr.Zero, value, value.Length);
|
||||
}
|
||||
|
||||
public static void ReleaseNative (IntPtr handle)
|
||||
public static void ReleaseNative (NativeHandle handle)
|
||||
{
|
||||
if (handle != IntPtr.Zero)
|
||||
if (handle != NativeHandle.Zero)
|
||||
CFObject.CFRelease (handle);
|
||||
}
|
||||
|
||||
|
@ -172,7 +172,7 @@ namespace CoreFoundation {
|
|||
}
|
||||
|
||||
// to be used when an API like CF*Get* returns a CFString
|
||||
public static string? FromHandle (IntPtr handle)
|
||||
public static string? FromHandle (NativeHandle handle)
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
return null;
|
||||
|
@ -199,7 +199,7 @@ namespace CoreFoundation {
|
|||
}
|
||||
|
||||
// to be used when an API like CF*Copy* returns a CFString
|
||||
public static string? FromHandle (IntPtr handle, bool releaseHandle)
|
||||
public static string? FromHandle (NativeHandle handle, bool releaseHandle)
|
||||
{
|
||||
var s = FromHandle (handle);
|
||||
if (releaseHandle && (handle != IntPtr.Zero))
|
||||
|
|
|
@ -32,6 +32,10 @@ using UIKit;
|
|||
using CoreVideo;
|
||||
#endif
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace CoreImage {
|
||||
|
@ -116,7 +120,7 @@ namespace CoreImage {
|
|||
return new CIFilter [0];
|
||||
var ret = new CIFilter [count];
|
||||
for (nuint i = 0; i < count; i++){
|
||||
IntPtr filterHandle = filters.ValueAt (i);
|
||||
var filterHandle = filters.ValueAt (i);
|
||||
string? filterName = CIFilter.GetFilterName (filterHandle);
|
||||
|
||||
ret [i] = CIFilter.FromName (filterName, filterHandle);
|
||||
|
@ -129,8 +133,8 @@ namespace CoreImage {
|
|||
if (colorSpace == null)
|
||||
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (colorSpace));
|
||||
|
||||
using (var arr = NSArray.FromIntPtrs (new IntPtr [] { colorSpace.Handle })){
|
||||
using (var keys = NSArray.FromIntPtrs (new IntPtr [] { CIImageInitializationOptionsKeys.ColorSpaceKey.Handle } )){
|
||||
using (var arr = NSArray.FromIntPtrs (new [] { colorSpace.Handle })){
|
||||
using (var keys = NSArray.FromIntPtrs (new [] { CIImageInitializationOptionsKeys.ColorSpaceKey.Handle } )){
|
||||
using (var dict = NSDictionary.FromObjectsAndKeysInternal (arr, keys)){
|
||||
return FromCGImage (image, dict);
|
||||
}
|
||||
|
|
|
@ -34,6 +34,10 @@ using CoreFoundation;
|
|||
using Foundation;
|
||||
using ObjCRuntime;
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
namespace CoreText {
|
||||
|
||||
internal static class Adapter {
|
||||
|
@ -74,10 +78,10 @@ namespace CoreText {
|
|||
return ((NSNumber) value).NUIntValue;
|
||||
}
|
||||
|
||||
public static T[] GetNativeArray<T> (NSDictionary dictionary, NSObject key, Converter<IntPtr, T> converter)
|
||||
public static T[] GetNativeArray<T> (NSDictionary dictionary, NSObject key, Converter<NativeHandle, T> converter)
|
||||
{
|
||||
var cfArrayRef = CFDictionary.GetValue (dictionary.Handle, key.Handle);
|
||||
if (cfArrayRef == IntPtr.Zero || CFArray.GetCount (cfArrayRef) == 0)
|
||||
if (cfArrayRef == NativeHandle.Zero || CFArray.GetCount (cfArrayRef) == 0)
|
||||
return new T [0];
|
||||
return NSArray.ArrayFromHandle (cfArrayRef, converter);
|
||||
}
|
||||
|
@ -192,7 +196,7 @@ namespace CoreText {
|
|||
public static void SetNativeValue<T> (NSDictionary dictionary, NSObject key, IEnumerable<T> value)
|
||||
where T : INativeObject
|
||||
{
|
||||
List<IntPtr> v;
|
||||
List<NativeHandle> v;
|
||||
if (value == null || (v = GetHandles (value)).Count == 0)
|
||||
SetNativeValue (dictionary, key, (INativeObject) null);
|
||||
else
|
||||
|
@ -200,10 +204,10 @@ namespace CoreText {
|
|||
SetNativeValue (dictionary, key, array);
|
||||
}
|
||||
|
||||
static List<IntPtr> GetHandles<T> (IEnumerable<T> value)
|
||||
static List<NativeHandle> GetHandles<T> (IEnumerable<T> value)
|
||||
where T : INativeObject
|
||||
{
|
||||
var v = new List<IntPtr> ();
|
||||
var v = new List<NativeHandle> ();
|
||||
foreach (var e in value)
|
||||
v.Add (e.Handle);
|
||||
return v;
|
||||
|
|
|
@ -2356,7 +2356,7 @@ namespace CoreText {
|
|||
if (cfArrayRef == IntPtr.Zero)
|
||||
return Array.Empty<CTFontTable> ();
|
||||
return NSArray.ArrayFromHandle (cfArrayRef, v => {
|
||||
return (CTFontTable) (uint) v;
|
||||
return (CTFontTable) (uint) (IntPtr) v;
|
||||
}, true);
|
||||
}
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@ namespace CoreText {
|
|||
internal class CTParagraphStyleSpecifierIntPtrsValue : CTParagraphStyleSpecifierValue {
|
||||
CFArray value;
|
||||
|
||||
public CTParagraphStyleSpecifierIntPtrsValue (CTParagraphStyleSpecifier spec, IntPtr[] value)
|
||||
public CTParagraphStyleSpecifierIntPtrsValue (CTParagraphStyleSpecifier spec, NativeHandle[] value)
|
||||
: base (spec)
|
||||
{
|
||||
this.value = CFArray.FromIntPtrs (value);
|
||||
|
@ -297,7 +297,7 @@ namespace CoreText {
|
|||
|
||||
static CTParagraphStyleSpecifierValue CreateValue (CTParagraphStyleSpecifier spec, IEnumerable<CTTextTab> value)
|
||||
{
|
||||
var handles = new List<IntPtr>();
|
||||
var handles = new List<NativeHandle>();
|
||||
foreach (var ts in value)
|
||||
handles.Add (ts.Handle);
|
||||
return new CTParagraphStyleSpecifierIntPtrsValue (spec, handles.ToArray ());
|
||||
|
|
|
@ -42,6 +42,10 @@ using CoreGraphics;
|
|||
using UIKit;
|
||||
#endif
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
namespace CoreText {
|
||||
|
||||
#region CFAttributedStringRef AttributeKey Prototypes
|
||||
|
@ -394,13 +398,16 @@ namespace CoreText {
|
|||
// 'Value must be a CFArray of CFNumberRefs' - System/Library/Frameworks/CoreText.framework/Headers/CTStringAttributes.h
|
||||
public void SetWritingDirection (params CTWritingDirection[] writingDirections)
|
||||
{
|
||||
var ptrs = new IntPtr [writingDirections.Length];
|
||||
var ptrs = new NativeHandle [writingDirections.Length];
|
||||
var numbers = new NSNumber [writingDirections.Length];
|
||||
for (int i = 0; i < writingDirections.Length; ++i) {
|
||||
ptrs[i] = (new NSNumber ((int) writingDirections[i])).Handle;
|
||||
numbers [i] = new NSNumber ((int) writingDirections [i]);
|
||||
ptrs [i] = numbers [i].Handle;
|
||||
}
|
||||
|
||||
var array = CFArray.Create (ptrs);
|
||||
CFMutableDictionary.SetValue (Dictionary.Handle, CTStringAttributeKey.WritingDirection.Handle, array);
|
||||
GC.KeepAlive (numbers); // make sure the numbers aren't freed until we're done with them
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,10 @@ using CoreMedia;
|
|||
#endif // !WATCH
|
||||
#endif
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace Foundation {
|
||||
|
@ -68,7 +72,7 @@ namespace Foundation {
|
|||
return NSArray.ArrayFromHandle<T> (value);
|
||||
}
|
||||
|
||||
protected T[]? GetArray<T> (NSString key, Func<IntPtr, T> creator)
|
||||
protected T[]? GetArray<T> (NSString key, Func<NativeHandle, T> creator)
|
||||
{
|
||||
if (key is null)
|
||||
throw new ArgumentNullException (nameof (key));
|
||||
|
@ -476,10 +480,10 @@ namespace Foundation {
|
|||
static class DictionaryContainerHelper {
|
||||
|
||||
// helper to avoid the (common pattern)
|
||||
// var p = x is null ? IntPtr.Zero : h.Dictionary.Handle;
|
||||
static public IntPtr GetHandle (this DictionaryContainer? self)
|
||||
// var p = x is null ? NativeHandle.Zero : h.Dictionary.Handle;
|
||||
static public NativeHandle GetHandle (this DictionaryContainer? self)
|
||||
{
|
||||
return self is null ? IntPtr.Zero : self.Dictionary.Handle;
|
||||
return self is null ? NativeHandle.Zero : self.Dictionary.Handle;
|
||||
}
|
||||
|
||||
// helper to avoid the (common pattern)
|
||||
|
|
|
@ -30,6 +30,10 @@ using System.Runtime.InteropServices;
|
|||
using CoreFoundation;
|
||||
using ObjCRuntime;
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
namespace Foundation {
|
||||
|
||||
public partial class NSArray {
|
||||
|
@ -217,7 +221,7 @@ namespace Foundation {
|
|||
}
|
||||
}
|
||||
|
||||
static public NSArray FromIntPtrs (IntPtr [] vals)
|
||||
static public NSArray FromIntPtrs (NativeHandle [] vals)
|
||||
{
|
||||
if (vals == null)
|
||||
throw new ArgumentNullException ("vals");
|
||||
|
@ -241,19 +245,23 @@ namespace Foundation {
|
|||
#endif
|
||||
}
|
||||
|
||||
internal static IntPtr GetAtIndex (IntPtr handle, nuint i)
|
||||
internal static NativeHandle GetAtIndex (NativeHandle handle, nuint i)
|
||||
{
|
||||
#if NET
|
||||
return Messaging.NativeHandle_objc_msgSend_UIntPtr (handle, Selector.GetHandle ("objectAtIndex:"), (UIntPtr) i);
|
||||
#else
|
||||
#if MONOMAC
|
||||
return Messaging.IntPtr_objc_msgSend_UIntPtr (handle, selObjectAtIndex_Handle, (UIntPtr) i);
|
||||
#else
|
||||
return Messaging.IntPtr_objc_msgSend_UIntPtr (handle, Selector.GetHandle ("objectAtIndex:"), (UIntPtr) i);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
[Obsolete ("Use of 'CFArray.StringArrayFromHandle' offers better performance.")]
|
||||
static public string [] StringArrayFromHandle (IntPtr handle)
|
||||
static public string [] StringArrayFromHandle (NativeHandle handle)
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
|
||||
var c = GetCount (handle);
|
||||
|
@ -264,9 +272,9 @@ namespace Foundation {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static public T [] ArrayFromHandle<T> (IntPtr handle) where T : class, INativeObject
|
||||
static public T [] ArrayFromHandle<T> (NativeHandle handle) where T : class, INativeObject
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
|
||||
var c = GetCount (handle);
|
||||
|
@ -278,9 +286,9 @@ namespace Foundation {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static public T [] EnumsFromHandle<T> (IntPtr handle) where T : struct, IConvertible
|
||||
static public T [] EnumsFromHandle<T> (NativeHandle handle) where T : struct, IConvertible
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
if (!typeof (T).IsEnum)
|
||||
throw new ArgumentException ("T must be an enum");
|
||||
|
@ -296,7 +304,7 @@ namespace Foundation {
|
|||
|
||||
static public T [] FromArray<T> (NSArray weakArray) where T : NSObject
|
||||
{
|
||||
if (weakArray == null || weakArray.Handle == IntPtr.Zero)
|
||||
if (weakArray is null || weakArray.Handle == NativeHandle.Zero)
|
||||
return null;
|
||||
try {
|
||||
nuint n = weakArray.Count;
|
||||
|
@ -312,7 +320,7 @@ namespace Foundation {
|
|||
|
||||
static public T [] FromArrayNative<T> (NSArray weakArray) where T : class, INativeObject
|
||||
{
|
||||
if (weakArray == null || weakArray.Handle == IntPtr.Zero)
|
||||
if (weakArray is null || weakArray.Handle == NativeHandle.Zero)
|
||||
return null;
|
||||
try {
|
||||
nuint n = weakArray.Count;
|
||||
|
@ -327,9 +335,9 @@ namespace Foundation {
|
|||
}
|
||||
|
||||
// Used when we need to provide our constructor
|
||||
static public T [] ArrayFromHandleFunc<T> (IntPtr handle, Func<IntPtr,T> createObject)
|
||||
static public T [] ArrayFromHandleFunc<T> (NativeHandle handle, Func<NativeHandle,T> createObject)
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
|
||||
var c = GetCount (handle);
|
||||
|
@ -341,9 +349,9 @@ namespace Foundation {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static public T [] ArrayFromHandle<T> (IntPtr handle, Converter<IntPtr, T> creator)
|
||||
static public T [] ArrayFromHandle<T> (NativeHandle handle, Converter<NativeHandle, T> creator)
|
||||
{
|
||||
if (handle == IntPtr.Zero)
|
||||
if (handle == NativeHandle.Zero)
|
||||
return null;
|
||||
|
||||
var c = GetCount (handle);
|
||||
|
@ -355,10 +363,10 @@ namespace Foundation {
|
|||
return ret;
|
||||
}
|
||||
|
||||
static public T [] ArrayFromHandle<T> (IntPtr handle, Converter<IntPtr, T> creator, bool releaseHandle)
|
||||
static public T [] ArrayFromHandle<T> (NativeHandle handle, Converter<NativeHandle, T> creator, bool releaseHandle)
|
||||
{
|
||||
var rv = ArrayFromHandle<T> (handle, creator);
|
||||
if (releaseHandle && handle == IntPtr.Zero)
|
||||
if (releaseHandle && handle == NativeHandle.Zero)
|
||||
NSObject.DangerousRelease (handle);
|
||||
return rv;
|
||||
}
|
||||
|
@ -366,7 +374,7 @@ namespace Foundation {
|
|||
// FIXME: before proving a real `this` indexer we need to clean the issues between
|
||||
// NSObject and INativeObject coexistance across all the API (it can not return T)
|
||||
|
||||
static T UnsafeGetItem<T> (IntPtr handle, nuint index) where T : class, INativeObject
|
||||
static T UnsafeGetItem<T> (NativeHandle handle, nuint index) where T : class, INativeObject
|
||||
{
|
||||
var val = GetAtIndex (handle, index);
|
||||
// A native code could return NSArray with NSNull.Null elements
|
||||
|
|
|
@ -238,7 +238,7 @@ namespace Security {
|
|||
public NSData? GetPublicKey ()
|
||||
{
|
||||
IntPtr result;
|
||||
using (var oids = NSArray.FromIntPtrs (new IntPtr[] { SecCertificateOIDs.SubjectPublicKey })) {
|
||||
using (var oids = NSArray.FromIntPtrs (new NativeHandle [] { SecCertificateOIDs.SubjectPublicKey })) {
|
||||
result = SecCertificateCopyValues (GetCheckedHandle (), oids.Handle, IntPtr.Zero);
|
||||
if (result == IntPtr.Zero)
|
||||
throw new ArgumentException ("Not a valid certificate");
|
||||
|
|
|
@ -21,6 +21,10 @@ using CoreFoundation;
|
|||
using Foundation;
|
||||
using ObjCRuntime;
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
namespace Security {
|
||||
#if !NET
|
||||
[Deprecated (PlatformName.MacOSX, 10,15, message: "Use 'Network.framework' instead.")]
|
||||
|
@ -473,7 +477,7 @@ namespace Security {
|
|||
{
|
||||
int i = identity is null ? 0 : 1;
|
||||
int n = certificates is null ? 0 : certificates.Count ();
|
||||
var ptrs = new IntPtr [n + i];
|
||||
var ptrs = new NativeHandle [n + i];
|
||||
if (i == 1)
|
||||
ptrs [0] = identity!.Handle;
|
||||
if (certificates is not null) {
|
||||
|
|
|
@ -15,6 +15,10 @@ using System.Runtime.InteropServices;
|
|||
using Foundation;
|
||||
using ObjCRuntime;
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
namespace UIKit {
|
||||
public partial class UIAppearance {
|
||||
public override bool Equals (object other)
|
||||
|
@ -45,15 +49,15 @@ namespace UIKit {
|
|||
return !(a == b);
|
||||
}
|
||||
|
||||
static IntPtr[] TypesToPointers (Type[] whenFoundIn)
|
||||
static NativeHandle[] TypesToPointers (Type[] whenFoundIn)
|
||||
{
|
||||
#if TVOS
|
||||
IntPtr [] ptrs = new IntPtr [whenFoundIn.Length];
|
||||
var ptrs = new NativeHandle [whenFoundIn.Length];
|
||||
#else
|
||||
if (whenFoundIn.Length > 4)
|
||||
throw new ArgumentException ("Only 4 parameters supported currently");
|
||||
|
||||
IntPtr [] ptrs = new IntPtr [5]; // creating an array of 5 when we support only 4 ensures that the last one is IntPtr.Zero.
|
||||
var ptrs = new NativeHandle [5]; // creating an array of 5 when we support only 4 ensures that the last one is IntPtr.Zero.
|
||||
#endif
|
||||
for (int i = 0; i < whenFoundIn.Length; i++){
|
||||
if (whenFoundIn [i] == null)
|
||||
|
@ -62,7 +66,7 @@ namespace UIKit {
|
|||
throw new ArgumentException (String.Format ("Type {0} does not derive from NSObject", whenFoundIn [i]));
|
||||
|
||||
var classHandle = Class.GetHandle (whenFoundIn [i]);
|
||||
if (classHandle == IntPtr.Zero)
|
||||
if (classHandle == NativeHandle.Zero)
|
||||
throw new ArgumentException (string.Format ("Could not find the Objective-C class for {0}", whenFoundIn[i].FullName));
|
||||
|
||||
ptrs [i] = classHandle;
|
||||
|
@ -104,7 +108,7 @@ namespace UIKit {
|
|||
[BindingImpl (BindingImplOptions.Optimizable)]
|
||||
public static IntPtr GetAppearance (IntPtr class_ptr, params Type [] whenFoundIn)
|
||||
{
|
||||
IntPtr[] ptrs = TypesToPointers (whenFoundIn);
|
||||
var ptrs = TypesToPointers (whenFoundIn);
|
||||
|
||||
if (Runtime.IsARM64CallingConvention) {
|
||||
// The native function takes a variable number of arguments ('appearanceWhenContainedIn:'), terminated with a nil value.
|
||||
|
@ -141,7 +145,7 @@ namespace UIKit {
|
|||
if (traits == null)
|
||||
throw new ArgumentNullException ("traits");
|
||||
|
||||
IntPtr[] ptrs = TypesToPointers (whenFoundIn);
|
||||
var ptrs = TypesToPointers (whenFoundIn);
|
||||
|
||||
if (Runtime.IsARM64CallingConvention) {
|
||||
// The native function takes a variable number of arguments ('appearanceWhenContainedIn:'), terminated with a nil value.
|
||||
|
|
|
@ -16,6 +16,10 @@ using System.Runtime.InteropServices;
|
|||
using CoreFoundation;
|
||||
using Foundation;
|
||||
|
||||
#if !NET
|
||||
using NativeHandle = System.IntPtr;
|
||||
#endif
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace UIKit {
|
||||
|
@ -73,8 +77,8 @@ namespace UIKit {
|
|||
|
||||
public static void Main (string []? args, Type? principalClass, Type? delegateClass)
|
||||
{
|
||||
var p = principalClass == null ? IntPtr.Zero : CFString.CreateNative (new Class (principalClass).Name);
|
||||
var d = delegateClass == null ? IntPtr.Zero : CFString.CreateNative (new Class (delegateClass).Name);
|
||||
var p = principalClass is null ? NativeHandle.Zero : CFString.CreateNative (new Class (principalClass).Name);
|
||||
var d = delegateClass is null ? NativeHandle.Zero : CFString.CreateNative (new Class (delegateClass).Name);
|
||||
Initialize ();
|
||||
UIApplicationMain (args?.Length ?? 0, args, p, d);
|
||||
CFString.ReleaseNative (d);
|
||||
|
|
|
@ -4759,7 +4759,7 @@ namespace MonoTouchFixtures.ObjCRuntime {
|
|||
using (var obj = new RefOutParametersSubclass ()) {
|
||||
var sel = Selector.GetHandle ("testClassArray:a:b:");
|
||||
var dummyObj = new Class [] { new Class (typeof (NSObject)) };
|
||||
var dummyArray = NSArray.FromIntPtrs (new IntPtr [] { Class.GetHandle (typeof (NSObject)) });
|
||||
var dummyArray = NSArray.FromIntPtrs (new NativeHandle [] { Class.GetHandle (typeof (NSObject)) });
|
||||
Class [] refObj = null;
|
||||
Class [] outObj = null;
|
||||
TestMethod<Class []> test = obj.TestClassArray;
|
||||
|
|
Загрузка…
Ссылка в новой задаче