将inout值转换为UnsafeMutablePointer <Unmanaged ?>
我在C中有一个带有指针的函数。 我试图从Swift中调用它。
从Swift的Calling C函数 (和个人经验)来看,做&var不起作用。
但是,我无法将&var转换为UnsafeMutablePointer …或任何类型的转换(例如将var的地址分配给另一个类型为UnsafeMutablePointer的变量)
(假设Type是一个对象)
谢谢
示例代码:
var zero = CreateCompressionSession(&session as UnsafeMutablePointer<Unmanaged?>, Int32(CVPixelBufferGetWidth(pixelBuffer)), Int32(CVPixelBufferGetHeight(pixelBuffer)))
在试图让它打电话时:
int CreateCompressionSession(VTCompressionSessionRef* session, int width, int height) { OSStatus err = VTCompressionSessionCreate(NULL, width, height, kCMVideoCodecType_H264, NULL, NULL, NULL, (VTCompressionOutputCallback)vtCallback, NULL, session); NSLog(@"%d %p", (int)err, session); if (err == noErr) { return 0; } else { return err; } }
也许您遇到的问题行为是由于Swift的旧版本,但根据我的经验和var应该实际工作。
确保CreateCompressionSession()和VTCompressionSessionRef(以及它指向的任何类型,如果它是指针类型)通过桥接头中包含的C头可用于Swift代码。 查看Swift签名是什么的CreateCompressionSession(),因为它被导入Swift以及如何导入VTCompressionSessionRef。 根据导入的结构在Swift代码中工作。 如果您愿意,可以在它们周围编写便利包装。
有关其他信息,请参阅此问题: Swift转换C的uint64_t与使用其自己的UInt64类型不同
这篇文章也可能有所帮助: http : //www.swiftprogrammer.info/callback_void.html
很抱歉,如果这不是很有帮助,因为我不熟悉你想要做的所有细节,但希望这会有所帮助。