将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

很抱歉,如果这不是很有帮助,因为我不熟悉你想要做的所有细节,但希望这会有所帮助。