
高级语言调用C接口的总结
高级语言调用C接口、包含Java、C#、Python、arkts等。
阿捏利
这个作者很懒,什么都没留下…
展开
-
高级语言调用C接口(二)回调函数(5)arkts
中的方式一样,对于C接口的处理在Napi层,同样是C/C++写的,所以没有任何类型上的问题。当回调触发时,在Napi层处理,将结构体的数据转换为arkts的类型,或者转换为Json字符串,作为回调参数传递到arkts层,在arkts层对Json字符串进行处理,这样,数据即可传到前端。原创 2025-04-16 13:11:25 · 177 阅读 · 0 评论 -
高级语言调用C接口(二)回调函数(4)Python
这里重要的点是回调函数中,结构体指针是C代码分配的内存,与python有区别,C的结构体中的字段并没有各种方法和属性,需要注意转换。前面2篇分别说了java和c#调用C接口,参数为回调函数,回调函数中参数是结构体指针。接下来说下python的调用方法。原创 2025-04-16 13:06:14 · 251 阅读 · 0 评论 -
高级语言调用C接口(二)回调函数(3)C#
由于回调传过来的C申请的内存,结构与C#不一致,必须通过Marshal进行转换,否则会出现内存访问异常。原接口定义请参照高级语言调用C接口(二)回调函数(2)实现、通过继承抽象类,重写抽象接口实现回调的具体逻辑。我们直接来看C#的接口定义。原创 2025-04-15 17:47:54 · 257 阅读 · 0 评论 -
高级语言调用C接口(二)回调函数(2)Java
接口用于初始化SDK并设置了回调函数。回调函数的参数是一个结构体的指针,首先,我们来看一下C中如何调用该接口。调用方法非常的简单粗暴,接下来,我们看一下JAVA中JNA是如何实现调用的。下一篇将介绍C#的调用方式。原创 2025-04-15 17:35:30 · 839 阅读 · 0 评论 -
高级语言调用C接口(五)结构体(3)-arkts
上一篇文章提到了,arkts和C接口之前还有一个Napi层,这层代码最大的优势就是C/C++编码,这样,我们只需要把数据通过Json格式传递到Napi层,Napi层再定义一个结构体并赋值即可。由于实现方式比较简单,这里就不给示例了,Napi层的调用代码甚至和C的Demo调用接口几乎完全一致,参数获取也比较简单,Json是一个字符串,直接读取即可,Json的转换可能会用到第三方库,个人使用Jsoncpp比较多,其它的也都差不多,个人习惯而已。原创 2025-04-14 10:13:05 · 202 阅读 · 0 评论 -
高级语言调用C接口(四)结构体(2)-Python
和Java、C#一样,由于高级语言的结构与C的结构体并不完全一样,高级语言的类包含方法,而C的结构体是定义即所见,所以C接口直接调用高级语言的结构体数组地址时,会崩溃,Python也和C#、Java一样,定义为数组并赋值,再将数组转换为连续内存。上一次说了Java和C#调用C接口传递结构体,今天来说一下Python。这个专栏好久没有更新了,主要是坑开的有点大,也不知道怎么填,涉及到的开发语言比较多,写起来比较累,需要看的人其实并不多,只能说,慢慢填吧,中间肯定还会插很多别的东西,更新频率自己也不知道。原创 2025-04-14 10:04:48 · 259 阅读 · 0 评论 -
高级语言调用C接口(三)结构体(1)-Java、C#
接口定义可以看出,C#有2重定义,C#调用会比Java更复杂,由于C结构体中定义的char*并非真正的字符串,而是指针,C#的string与char*并不能直接转换,加上汉字乱码问题,所以,调用C层接口前,需要做如下封装处理。上一篇简单说了回调函数,其中回调函数包含更复杂的参数,结构体等,所以,本系列的第三篇先说一下结构体,由于内容会比较多,本篇先说Java(Jna调用、Jni比较复杂,如有需要,后面再单独来将)、C#两种比较常见的开发语言。接下来我们来看一下Java的Jna改如何调用。原创 2024-11-27 13:59:45 · 438 阅读 · 0 评论 -
高级语言调用C接口(二)回调函数(1)
先来看一下C接口的定义,这个回调比较简单,参数只有一个const char*#else#endif#endif//消息回调函数#endif这里是初始化SDK,并设置消息推送的回调函数,C语言的调用方式比较简单elseJava调用C接口有2种方式,Jni和Jna,Jni需要编写C层代码,运行的适应率更高,包括一些ZF、JF的SM机都可以正常运行,Jna由于运行时需要在临时目录下解压jar包,可能会有权限问题。原创 2024-11-14 14:59:51 · 1468 阅读 · 0 评论 -
高级语言调用C接口(一)基础类型与基础类型指针的对应关系
C变量类型Java变量类型C#变量类型python变量类型arkts变量类型备注intintintc_intnumberlonguintc_uintnumbershortshortshortc_shortnumberintushortc_ushortnumberlongintintc_longnumber32位系统中,C中的long型占4字节,可以当作int来使用longuintc_ulongnumber。原创 2024-11-12 13:28:03 · 608 阅读 · 0 评论 -
高级语言调用C接口(前言)
后来逐步接触高级语言对C接口的调用,毕竟,底层C开发要比高级语言性能好,这就涉及到一个无法回避的问题,C的很多类型对于高级语言并不友好,比如指针、结构体、函数指针、回调等等。至今用到过的语言也比较多,常见的Java、C#、python,不常见的Delphi,PB以及最近非常热门的鸿蒙等等。开这个坑就是想记录一下自己遇到过的各种花式调用情况,以及遇到的让人头大的问题,以及一些解决方法。当然也会有至今没遇到的情况,边写边看吧。坑先开着,啥时候填也不知道,内容太多,工作之余来写,时间不固定,能不能写完就随缘吧。原创 2024-10-12 17:46:07 · 320 阅读 · 0 评论