Slide 22
Slide 22 text
PATH = '/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation'
def self.image
@image ||= Fiddle.dlopen(PATH)
end
def self.extern(symbol, parameter_types, return_type)
extern_image(image, symbol, parameter_types, return_type)
end
extern :CFDataGetLength, [CFTypeRef], CFIndex
extern :CFDataGetBytePtr, [CFTypeRef], VoidPointer
def self.CFStringToRubyString(string)
data = CFStringCreateExternalRepresentation(NULL,
string,
KCFStringEncodingUTF8,
0)
if data.null?
raise TypeError, 'Unable to convert CFStringRef.'
end
bytes_ptr = CFDataGetBytePtr(data)
result = bytes_ptr.to_str(CFDataGetLength(data))
result.force_encoding(Encoding::UTF_8)
result
end