我在C中有一个接受指针的函数。我正试着从斯威夫特给它打电话。
从Calling C function from Swift (和个人经验)来看,做&var是行不通的。
但是,我不能将&var转换为UnsafeMutablePointer...也不需要任何类型的转换(比如将var的地址赋给另一个类型为UnsafeMutablePointer的变量)
(假设类型是一个对象)
谢谢
示例代码:
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;
}
}发布于 2015-11-05 13:59:52
也许你遇到的问题行为是由于Swift的旧版本造成的,但根据我的经验&var实际上应该可以工作。
确保CreateCompressionSession()和VTCompressionSessionRef (以及它所指向的任何类型,如果它是指针类型)可以通过包含在桥接头中的C头用于Swift代码。了解CreateCompressionSession()在导入Swift时的Swift签名是什么,以及VTCompressionSessionRef是如何导入的。根据导入的结构处理您的Swift代码。如果您愿意,您可以在它们周围编写方便的包装器。
有关更多信息,请参阅此问题:Swift converts C's uint64_t different than it uses its own UInt64 type
这里还有一篇可能会有所帮助的文章:http://www.swiftprogrammer.info/callback_void.html
如果这不是很有帮助,我很抱歉,因为我不熟悉您正在尝试做的所有细节,但希望这能有所帮助。
https://stackoverflow.com/questions/31552430
复制相似问题