2016-10-24 77 views
1

我正在为一个预编译的C库构建一个Swift包装器/接口,这个C库随附其自己的头文件。除了以下内容,我还有其他所有功能。该库读取已加载文件标题的给定部分。我有一个结构,看起来像这样:我怎样才能得到一个C指针的值到一个Swift结构?

typedef struct { 
    DWORD width; 
    DWORD height; 
    DWORD length; 
    const void *data; 
} T_PICTURE; 

,并表示库中的函数时,它被赋予一个可读的文件(特定的元数据的一部分,图片是精确的)返回一个指针UnsafePointer<Int8>

我的问题是:我如何能够将给定内存位置的数据分配给这种结构?

我想将内存中的空间分配给这种结构,但到目前为止我一直无法。

我很积极,因为我对编程比较陌生,所以我错过了一些至关重要的东西,或者至少我没有看到根本的东西。在决定询问之前已经四处寻找好几天了,谢谢您!

回答

1

如果我理解你的问题正确,那么你有一个
ptr: UnsafePointer<Int8>指向包含一个T_PICTURE结构的存储位置。

Swift 2你可以简单地“改写”指针并遵守它。 这将复制的数据指出,通过ptrT_PICTURE类型的picture变量:

let picture = UnsafePointer<T_PICTURE>(ptr).memory 

斯威夫特3你必须 “重新绑定” 指针:

let picture = ptr.withMemoryRebound(to: T_PICTURE.self, capacity: 1) { 
    $0.pointee 
} 

有关新指针转换 API的更多信息,请参见UnsafeRawPointer Migration

+0

非常感谢!多年来一直在这里,刚刚签约提出这个问题,因为这确实是一件难事。简直不敢相信我的第一个问题得到如此迅速的回应并取得了良好的成功干杯! – drummingdemon

+0

@drummingdemon:不客气,欢迎来到SO! –

相关问题