【问题标题】:Swift casting unsafemutablepointer<MyStruct> to C void return pointer in swiftSwift 将 unsafemutablepointer<MyStruct> 转换为 swift 中的 C void 返回指针
【发布时间】:2016-01-28 08:32:00
【问题描述】:

我在 C 中有一个结构类型,并且 swift 从 C 定义中创建了一个结构指针 var - 这部分工作正常。

我有一个 C 函数,它返回一个指向相同类型的 C 结构的 void 指针。

问题是返回的 C void 指针没有转换到接收 swift 结构指针。我不知道如何转换或转换它。我错过了什么?

C 标题

void* MyCFunc(int input);
struct MyStruct
{
   int ID;
   int thisOne;
   float thatOne;
} MyStruct;

快速呼叫代码

var ptr:UnsafePointer<MyStruct>
ptr = MyCFunc(5)                   //Error Here

【问题讨论】:

    标签: swift swift2


    【解决方案1】:

    看看这个“自我解释”的例子

    struct MyStruct {
        var myId: Int
        var myDouble: Double
    }
    
    var myStruct = MyStruct(myId: 1, myDouble: 1.0)
    
    // this mimics the funcion which returns Void *myStruct
    var vptr = withUnsafeMutablePointer(&myStruct) { (pStruct) -> UnsafeMutablePointer<Void> in
        return UnsafeMutablePointer<Void>(pStruct)
    }
    print(vptr) // 0x00000001079c7828
    // mimics mPtr =  (MyStruct *) vptr
    let mPtr = UnsafeMutablePointer<MyStruct>(vptr) // UnsafeMutablePointer(0x10EE37838)
    
    mPtr.memory.myId = 10
    mPtr.memory.myDouble = 10.0
    
    print(myStruct) // MyStruct(myId: 10, myDouble: 10.0)
    

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      相关资源
      最近更新 更多