美文网首页
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