c/c++语言开发共享是否可以将Swift类转换为C void *指针?

是否可以将Swift类转换为C void *指针?

// swift class class MyClass { } var myClass = MyClass() var p: UnsafeMutablePointer = myClass //<- failed //c function void someSwiftClass(void *context); 

谢谢

    我有类似的问题,你可以将其转换如下。

     var myClass = MyClass() var classPtr = unsafeBitCast(myClass, UnsafePointer.self) 

    和你的function,

     func someSwiftClass(voidPointer: UnsafeMutablePointer) { } 

    如果要声明常量指针,请使用UnsafePointer ,当指针不是常量时,使用UnsafeMutablePointer

    在C常量指针 – const int *myCpointer

    对应的swift指针 – let mySwiftPointer: UnsafePointer

    这有效:

     var p: UnsafeMutablePointer = UnsafeMutablePointer(Unmanaged.passUnretained(myClass).toOpaque()) 

    我已经使用Swift 2进行了一些测试.Swift 2中的行为可能与之前的Swift版本中的行为不同,但这是我发现的。

    Amit89和newacct建议的解决方案将编译,但在C代码中使用MyClass实例可能会出现问题。 像这样的东西

     someSwiftClass(&myClass) 

    也会编译得很好,但同样的问题。

    我不知道原始问题的上下文,但让我猜测C代码会对传递给someSwiftClass()的void *做一些事情,所以有一个C类型的实例,指针被认为指向。 正如我的经验所示,在这种情况下,将C数据类型(很可能是结构)导入Swift并在整个Swift代码中使用该导入类型或使用一些包装Swift类/结构更安全。 您可以编写包装器来包装UnsafeMutablePointer,在这种情况下,对Swift代码中的数据所做的更改将在C中可见!

    有关更多详细信息,请参阅此问题: Swift转换C的uint64_t与使用其自己的UInt64类型不同

    我还有一篇你可能会觉得有用的博客文章: http : //www.swiftprogrammer.info/callback_void.html

      以上就是c/c++开发分享是否可以将Swift类转换为C void *指针?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/578030.html

      (0)
      上一篇 2021年3月22日
      下一篇 2021年3月22日

      精彩推荐