[Mac] Use out/ref parameters instead of unsafe pointers in bindings

This commit is contained in:
thefiddler 2014-01-05 22:05:54 +01:00
parent fa386dc991
commit b458b40683

View file

@ -62,6 +62,7 @@ namespace OpenTK.Platform.MacOS.Carbon
} }
} }
} }
struct CFDictionary struct CFDictionary
{ {
public CFDictionary(IntPtr reference) public CFDictionary(IntPtr reference)
@ -79,20 +80,18 @@ namespace OpenTK.Platform.MacOS.Carbon
return CF.CFDictionaryGetCount(dictionaryRef); return CF.CFDictionaryGetCount(dictionaryRef);
} }
} }
public double GetNumberValue(string key) public double GetNumberValue(string key)
{
unsafe
{ {
double retval; double retval;
IntPtr cfnum = CF.CFDictionaryGetValue(dictionaryRef, IntPtr cfnum = CF.CFDictionaryGetValue(dictionaryRef,
CF.CFSTR(key)); CF.CFSTR(key));
CF.CFNumberGetValue(cfnum, CF.CFNumberType.kCFNumberDoubleType, &retval); CF.CFNumberGetValue(cfnum, CF.CFNumberType.kCFNumberDoubleType, out retval);
return retval; return retval;
} }
} }
}
class CF class CF
{ {
const string appServices = "/System/Library/Frameworks/ApplicationServices.framework/Versions/Current/ApplicationServices"; const string appServices = "/System/Library/Frameworks/ApplicationServices.framework/Versions/Current/ApplicationServices";
@ -150,9 +149,11 @@ namespace OpenTK.Platform.MacOS.Carbon
); );
[DllImport(appServices)] [DllImport(appServices)]
internal unsafe static extern bool CFNumberGetValue (IntPtr number, CFNumberType theType, int* valuePtr); internal static extern bool CFNumberGetValue (IntPtr number, CFNumberType theType, out int valuePtr);
[DllImport(appServices)] [DllImport(appServices)]
internal unsafe static extern bool CFNumberGetValue(IntPtr number, CFNumberType theType, double* valuePtr); internal static extern bool CFNumberGetValue (IntPtr number, CFNumberType theType, out long valuePtr);
[DllImport(appServices)]
internal static extern bool CFNumberGetValue(IntPtr number, CFNumberType theType, out double valuePtr);
internal enum CFNumberType internal enum CFNumberType
{ {