我想从OS X的DVDPlayback框架中调用以下函数:
OSStatus DVDGetMediaVolumeCFName (
CFStringRef *outDiscVolumeCFName
);
最终,我提出了以下工作代码:
framework 'DVDPlayback'
p2 = Pointer.new_with_type('^{__CFString}')
DVDGetMediaVolumeCFName(p2)
但是我没有在任何文档中找到'^{__CFString}'
位,只知道它之后的实际操作(我最初是从错误信息中剪切并粘贴它)。我首先尝试了Pointer.new:id和:string但没有成功。
所以我的问题是:
答案 0 :(得分:1)
虽然存在从NSString到CFStringRef的“免费”桥接,但由于使用了ARC(自动引用计数),因此同样不适用于NSString *到CFStringRef *。将CFStringRef *转换为NSString *需要使用 __ bridge ,因此
Pointer.new(:string)
不起作用。使用
Pointer.new_with_type('^{__CFString}')
是获取此指针的最佳方法,查找此信息的最佳方法是查看选择了错误类型时生成的TypeError。例如:
expected instance of Pointer of type `^{__CFString}', got `*' (TypeError)