美文网首页
ios项目集成c语言写的SDK

ios项目集成c语言写的SDK

作者: 鱼嘿蛮仁 | 来源:发表于2024-01-28 18:39 被阅读0次

    项目中有个需求:集成一个转发器设备的SDK。SDK底层是采用标准C编写的。记录下使用过程。

    在SDK的头文件中可以看到如下代码。

    #ifdef __cplusplus
    extern "C"{
    #endif
    
    xxxxxx //C语言的SDK基础接口函数实现
    
    #ifdef __cplusplus
    }
    #endif
    

    cplusplus即C++,#ifdef是条件编译,作用是C代码被C++代码调用时,定义了“__cplusplus”宏,用extern “C”{ }将c代码括起来,表明这是C代码,这样就可以保证C++代码正确的调用C代码。C++是在C的基础上发展出来的,有一些特性是C语言没有的,比如函数重载,所以要指明这是C代码,不然就会出错。

    首先在你需要用到sdk接口的地方引入sdk头文件

    #import <XXXSDK/XXConfigSDK.h>
    

    一、在OC的类中是可以直接调用c语言方法的。例如:

    -(void)playvideobtn{
     
        //调用c语言方法:
        sayHello();
    }
    //c语言方法:
    void sayHello(){
     
        printf("Hello OC");
     
    }
    

    二、在C函数里如何调用OC的方法呢?

    1、首先需要定义一个全局静态变量指针用于保存当前类的地址。

    static LCBindWRRFIRViewController *selfClass = nil;
    @interface LCBindWRRFIRViewController ()
    @end
    

    2、函数指针指向自己。

    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor whiteColor];
        selfClass =self;
    }
    

    3、然后就可以在C函数中调用OC的方法了。

    // 配网回调函数
    void linkCallbackFunc(const char *msgSrc,
                      const unsigned char *pDatBuf, const int datLen, const long userData) {
        printf("回调函数被调用,配网结果为: %s\n", pDatBuf);
    
        [selfClass bindDevWithpDatBuf:pDatBuf];//这里调用的是OC方法
    }
    

    其中sdk中的一个接口的参数需要传入一个方法函数作为回调方法。

    //这里是字符串转char
    const char *cssid = [self.ssid UTF8String];
    const char *cpasswd = [self.passwd UTF8String];
    //这里是调用SDK的接口(c函数)其中linkCallbackFunc就是上面定义的配网回调函数linkCallbackFunc作为参数。
    config_linkStart(0, cssid, cpasswd, linkCallbackFunc, 0);
    

    相关文章

      网友评论

          本文标题:ios项目集成c语言写的SDK

          本文链接:https://www.haomeiwen.com/subject/clgwodtx.html