CANoe教程 | 高级编程 - CAPL DLL
CAPL程序可以调用C/C++程序实现的函数接口,这些函数需要按照特定的规则封装在动态链接库(DLL)中。
为什么要用CAPL DLL
- CANoe提供的函数库已经非常丰富,但是实际开发中总会遇到CANoe函数不够用的情况。
- CAPL支持的数据类型远没有C/C++丰富,也不支持指针,无法实现更为复杂的算法。
- 用户在工程项目中已经用C/C++实现的算法可以在CAPL DLL中封装成接口供CANoe使用,避免重复造轮子。
如何创建一个CAPL DLL工程
CANoe提供了CAPLdll的Demo。安装CANoe后Demo的路径在: C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 13.0.155\Programming\CAPLdll 路径中包含两个VS Project和一个CMakeProject.
我们可以根据需要选择demo工程作为base进行开发。 以VS 2017 Project为例,进入目录后双击capldll.sh打开vs工程:
如何将C/C++函数导出到CAPL
dll通过一个函数表(function table)将函数导出到CAPL。
表中第一行包含版本信息,格式定义:
需要导出的函数定义格式:
如何创建CAPL 回调函数
CAPL回调函数可以在CANoe运行时被CAPL DLL独立调用。CAPL回调函数的接口声明描述可以在文件VIA_CDLL.h 和 VIA.h中找到。 Demo中实现了一个CaplInstanceData类来处理回调函数,用户可以参考这个类来定义自己的回调函数。 在CAPL DLL中获取CAPL函数句柄:
在CAPL文件中实现回调函数:
注意:CAPL文件中的回调函数参数定义要与CAPL DLL工程中一致。
如何在CAPL中使用DLL
将DLL集成到CAPL中有两种方式:
- 从Options添加
- 在CAPL文件中添加