我在C中有一个带指针的函数。 我试图从Swift中调用它。
从Calling C function from Swift,(和个人经验),做& var不起作用。
但是,我无法将& var转换为UnsafeMutablePointer ...或任何类型的转换(例如将var的地址分配给另一个类型为UnsafeMutablePointer的变量)
(假设Type是一个对象)
由于
示例代码:
var zero = CreateCompressionSession(&session as UnsafeMutablePointer<Unmanaged<VTCompressionSession>?>, 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;
}
}
答案 0 :(得分:0)
也许您遇到的有问题的行为是由于Swift的旧版本,但根据我的经验和变量应该实际工作。
确保CreateCompressionSession()和VTCompressionSessionRef(以及它指向的任何类型,如果它是指针类型)通过桥接头中包含的C头可用于Swift代码。查看Swift签名是什么的CreateCompressionSession(),因为它被导入Swift以及如何导入VTCompressionSessionRef。根据导入的结构在Swift代码中工作。如果愿意,你可以在它们周围写下便利包装。
有关其他信息,请参阅此问题:Swift converts C's uint64_t different than it uses its own UInt64 type
这篇文章也可能会有所帮助: http://www.swiftprogrammer.info/callback_void.html
很抱歉,如果这不是很有用,因为我不熟悉你想要做的所有细节,但希望这会有所帮助。