美文网首页Swift
如何在swift中调用输入/输出为void*的C函数

如何在swift中调用输入/输出为void*的C函数

作者: 独白melody | 来源:发表于2017-12-04 17:04 被阅读56次

前言

开发过程中难免遇到各种各样的需求,有的需求则需要调用某些硬件公司开发的SDK,然而这些SDK往往比较底层,接口大部分是使用C语言写的,然而众所周知OC调用C语言API还是比较轻松的,然后swift调用C则比较麻烦了。本人是在接入某实时监控SDK时遇到的此类问题,需要传入一个UIView给C函数,在该UIView上面显示实时监控画面。

LONG __stdcall NET_DVR_RealPlay_V40(LONG lUserID, void* lpPreview, REALDATACALLBACK fRealDataCallBack_V30 = NULL, void* pUser = NULL);

由于本人解决该问题走了很多弯路,直接相关的文章又十分稀少,故写此文章进行分享。

实际问题与解决方案

问题:如何将swift中的UIView对象转化为void*类型作为参数调用C函数?

须知:swift要想调用C函数必须经由OC桥接完成。

解决方案一:在swift中使用UnsafeMutableRawPointer指针指向UIView对象,再通过OC桥接文件中声明该C函数,最后在swift中直接传入UnsafeMutableRawPointer类型参数进行调用。

原理:UnsafeMutableRawPointer:swift指针类型,相当于C中的void*。

解决方案二:创建一个相应的OC函数,参数类型改为id。在该OC函数中将id转为void*类型后,再在该OC函数中调用那个C函数。

原理:id:OC指针类型,相当于C中的void*,对应于swift中的Any?类型。

总结与demo

由于解决方案一中的swift指针使用起来比较复杂而且危险,不太推荐像我这样的萌新使用。Apple将它命名为Unsafe也是警告你使用它必须足够自信。但也希望有好学的童鞋能写一个解决方案一的demo一起分享使用~

推荐使用解决方案二,另附上一个简单的demo帮助大家理解和使用。

本人QQ:1219953432 欢迎拍砖指正~

参考文章

如何在Swift中调用C函数

Swift中的指针操作详解

5分钟搞定内存字节对齐

相关文章

  • 如何在swift中调用输入/输出为void*的C函数

    前言 开发过程中难免遇到各种各样的需求,有的需求则需要调用某些硬件公司开发的SDK,然而这些SDK往往比较底层,接...

  • c++ 入门 - 函数重载,extern

    c++的输入输出 输入 输出 例子 extern extern 修饰符可用于c++中调用c函数的调用规范比如在c+...

  • Swift 调用 Objective-C 的可变参数函数

    Swift 调用 Objective-C 的可变参数函数 Swift 调用 Objective-C 的可变参数函数

  • Android NDK 7 C语言IO

    一、输入和输出流 C 语言的标准输入输出函数都是独立于设备的,不需要考虑如何在特定设备上传输数据;C 语言的库函数...

  • 打卡7.25

    题目:输入3个数a,b,c,按大小顺序输出。(函数方法) 程序: #include void swap(int *...

  • 8.2低级I/O--read和write

    输入和输出是通过read和write系统调用实现的(调用系统的功能),在C语言程序中,可以通过函数read和wri...

  • lua调用c++中的函数(使用LuaBridge)

    前面一节简述描写了如何在c++中调用lua函数,这节简述描写如何在lua中调用c++中的函数,还是使用前一节的工程...

  • Swift掉C函数

    Swift调用C函数 编写C函数 在桥接头文件中引入C头文件,就是C语言和Swift之间有一个桥梁的作用 Swif...

  • swift中如何调用c

    如何在swift调用c代码呢? swift通过工程的桥接文件,调用c的相关代码!!! 1.创建c文件:test.h...

  • 输入输出函数总结

    1. C++中各种输入输出函数总结 与输入输出流操作相关的类关系 2. 键盘输入输出函数 2.1. scanf函数...

网友评论

    本文标题:如何在swift中调用输入/输出为void*的C函数

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