将inout值转换为UnsafeMutablePointer <unmanaged <type>?&gt;

时间:2015-07-22 01:33:26

标签: c swift

我在C中有一个带指针的函数。 我试图从Swift中调用它。

Calling C function from Swift,(和个人经验),做&amp; var不起作用。

但是,我无法将&amp; 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;
    }
}

1 个答案:

答案 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

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