【问题标题】:How to pass c function pointer in swift如何在swift中传递c函数指针
【发布时间】:2015-05-24 08:52:10
【问题描述】:

我在我的 swift 项目中使用 C 第三方库,如何在 swift 中传递回调函数指针? 当我调用第三方函数“注册”时,我得到一个错误“无法调用.......”

感谢您对此问题的帮助

// file: MyClass.swift
 class MyClass: Object {

   init() {
       typealias callbackPtr = CFunctionPointer<((CInt , UnsafePointer<Void>) -> Void)>
       let selfObject = unsafeBitCast(self, UnsafePointer<Void>.self)

       // call third-part function
       register(callbackPtr, selfObject) //failure point is here
   }

   func greeting() {
       println(“Hello…”)
   }    

}

// file: callBack.h
//
// Third-part Function
// register(void(*functionPtr)(number int, void *context) handler, void *context)
//
// Third-party callback function pointer
// typedef void (*functionPtr)(number int, void *context);

void callbackFunctionPointer(number int, void *context)

// file: callBack.m
void callbackFunctionPointer(number int, void *context) {

    MyClass *myClass =  (__bridge MyClass *)context;
   [myClass greeting];
} 

【问题讨论】:

    标签: objective-c c swift callback


    【解决方案1】:

    使用register(&amp;callbackPtr, selfObject) 传递指针而不是变量。 &amp; 获取变量(或指针)的指针。

    【讨论】:

    • 得到一个错误,如果我在寄存器函数中添加 & -> 错误:表达式类型不明确,没有更多上下文寄存器(&callbackPtr,selfObject)
    • 能否请您编辑方法声明以及实际的错误消息?
    • 回调函数格式在第三方库中定义。我可以流动
    • 我正在寻找头文件中的注册函数,而不是随机的 typedef 语句:p
    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多