首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将inout值转换为UnsafeMutablePointer<Unmanaged<TYPE>?>

将inout值转换为UnsafeMutablePointer<Unmanaged<TYPE>?>
EN

Stack Overflow用户
提问于 2015-07-22 09:33:26
回答 1查看 752关注 0票数 2

我在C中有一个接受指针的函数。我正试着从斯威夫特给它打电话。

Calling C function from Swift (和个人经验)来看,做&var是行不通的。

但是,我不能将&var转换为UnsafeMutablePointer...也不需要任何类型的转换(比如将var的地址赋给另一个类型为UnsafeMutablePointer的变量)

(假设类型是一个对象)

谢谢

示例代码:

代码语言:javascript
运行
复制
var zero = CreateCompressionSession(&session as UnsafeMutablePointer<Unmanaged<VTCompressionSession>?>, Int32(CVPixelBufferGetWidth(pixelBuffer)), Int32(CVPixelBufferGetHeight(pixelBuffer)))

在尝试让它调用时:

代码语言:javascript
运行
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 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

如果这不是很有帮助,我很抱歉,因为我不熟悉您正在尝试做的所有细节,但希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31552430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档