美文网首页
Swift调用C函数指针与OC调用函数指针的区别

Swift调用C函数指针与OC调用函数指针的区别

作者: angle_杰 | 来源:发表于2018-10-16 14:21 被阅读15次

项目使用混编的已经很常见了,在使用过程中遇到了Swift调用C函数和OC调用C函数区别还是有点大的,这里记录一下,

这里的C函数有个参数是函数指针

C函数原型是这样的


AVAPI_API int  avServStart3(int nIOTCSessionID, authFn pfxAuthFn, unsigned int nTimeout, unsigned int nServType, unsigned char nIOTCChannelID, int *pnResend);

//其中pfxAuthFn是一个使用typedef定义的函数指针,意思为:用authFn来表示int(*)(char *, char *)
typedef int (_stdcall *authFn)(char *szViewAccount,char *szViewPassword);

Swift调用C函数

let avChannel:CUnsignedChar = 2
 let avSerNum = avServStart3(SID, 
{(account,password) -> Int32 in
       let accountStr:String = String(cString: account!)
       let passwordStr:String = String(cString:password!)
       print("accountStr====\(accountStr)====passwordStr==\(passwordStr)")
                                        
        if accountStr == ServiceAccount && passwordStr == ServicePassword {
            return 1
          }else{
             return 0
           }
        },
                                 5,
                                 1,
                                 avChannel,
                                 SwiftIntToInt32(number: 1))

/*

{(account,password) -> Int32 in
       let accountStr:String = String(cString: account!)
       let passwordStr:String = String(cString:password!)
       print("accountStr====\(accountStr)====passwordStr==\(passwordStr)")
                                        
        if accountStr == ServiceAccount && passwordStr == ServicePassword {
            return 1
          }else{
             return 0
           }
        }
其中这一块是一个闭包,account和password都是从C那边回调回到的数据,这里判断是否跟自己的账号密码相同,不用单独写一个回调函数,闭包就可以方便的解决
*/

OC调用C函数

int avSerNum = avServStart3(SID,intIntAuthFn, 5, 1, 2, &pnResend);

//这里是单独写的一个回调方法,方法不能直接写在👆的方法里,需要单独拉出来写,但是跟swift中是相同的,account和password都是C函数那边返回的数据
int intIntAuthFn(char *account,char *password) {
    
    NSString *accountStr = [NSString stringWithUTF8String:account];
    NSString *passwordStr = [NSString stringWithUTF8String:password];

    if ([accountStr isEqualToString:AccountStr] && [passwordStr isEqualToString:PasswordStr]) {
        return 1;
    }else{
        return 0;
    }
}

好了,以上就是自己遇到的混编问题,如果有什么不对的地方欢迎大家指正!!!

相关文章

  • Swift调用C函数指针与OC调用函数指针的区别

    项目使用混编的已经很常见了,在使用过程中遇到了Swift调用C函数和OC调用C函数区别还是有点大的,这里记录一下,...

  • iOS直接调用函数和调用函数指针的区别与原理

    函数和函数指针调用时候的区别: 区别:运行效率不同 ,直接调用函数指针运行效率高(ps:大量数据的时候) 原因:调...

  • iOS Block

    block本质block是封装了函数调用以及函数调用环境的OC对象(它内部也有个isa指针) 函数调用环境:函数调...

  • C语言特性(函数与指针)

    函数与指针 用函数指针变量调用函数 当定义函数之后,C语言允许定义一个指针变量来指向该函数,接下来就可通过该指针变...

  • C++面向对象高级编程(下)-第二周-博览网

    对象模型 指针指向子类,通过指针调用虚函数,自动调用子类的虚函数实现, 指针调用虚函数时,不做静态绑定,做动态绑定...

  • block详解

    block本质: 每个OC对象内部都有isa指针,block也不例外;block其实就是封装函数调用,以及函数调用...

  • C++:函数指针

    函数指针:是一个特殊的指针,用于指向函数。和通过函数名调用一样,函数指针给我们提供了另一种调用函数的可能。函数指针...

  • Block

    Block的本质 Block本质是个OC对象,它内部也有个isa指针,是封装了函数调用以及函数调用环境的OC对象....

  • iOS OC BLOCK

    blcok 本质上也是个 oc 对象,其内部结构也是具有 isa 指针,是封装了函数调用以及函数调用环境的 OC ...

  • C++:函数指针 & 返回函数指针的函数

    函数指针 & 返回函数指针的函数 一、函数指针的声明和使用 声明一个函数指针,给它赋值并调用它指向的函数 函数指针...

网友评论

      本文标题:Swift调用C函数指针与OC调用函数指针的区别

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