欢迎大家来到带你玩转车载测试系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。
学习过程中如有任何疑问,可底下评论!
如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持!
CANoe作为一款功能强大的总线开发及测试工具,不仅仅是因为其丰富的库函数,最重要的是其兼容了多种编程语言,可以实现灵活的开发,极大的解决了纯CAPL编程所带来的限制,如通过动态链接库(DLL)来实现复杂函数的编写,使其能够在CAPL中可以调用,下面将对DLL的实现进行分析。
1. 什么是capldll
capldll是指利用C/C++语言按照VECTOR制定的规则生成的可以在CAPL中进行调用的.dll文件,与一般的dll文件所不同的是,capldll文件必须按照Vector官方指定的模板进行生成,方可在CAPL中进行调用,否则将无法调用。
Vector官方指定的模板位于C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 17.0.201\Programming\CAPLdll\文件下,如下图。

文件中有VS2017和VS2013两个工程,大家可以根据自己VS的版本选择任意工程,接下里我将以VS2017这一工程举例说明。
2. VS2017工程介绍
在VS2017工程中打开capldll.sln文件,如下图所示:

capldll.cpp这个文件初看相当复杂,从整体上来说,这段代码主要包含了两部分:自定义函数实现和回调函数定义,今天的主要任务是实现自定义函数,这里的函数定义与普通函数定义差不多,只是利用了CAPL的格式。
其格式如下所示:

(1)编写一个赋值函数:
void CAPLEXPORT far CAPLPASCAL appPut(unsigned long x
{
data = x;
}
{"dllPut", (CAPL_FARCALL)appPut, "CAPL_DLL","This function will save data from CAPL to DLL memory",'V', 1, "D", "\000", {"x"}},
其中,各个参数具体含义如下:

CAPL中数据类型与C/C++中的数据类型对应关系如下:

(2)使用引用编写dll函数:
void CAPLEXPORT far CAPLPASCAL appSum(long i, long j, long* s)
{
*s = i + j;
}
{"sum", (CAPL_FARCALL) appSum, "CAPL_DLL", "Sum via
reference parameter", 'V', 3, {'L', 'L', 'L' - 128}, "", {"i", "j", "s"} },
3. 实例解读
生成capldll文件包含两个数求和的函数,并在CANoe中调用验证,代码如下。
/*----------------------------------------------------------------------------
|
| File Name: capldll.cpp
|
| Example of a capl DLL implementation module and using CAPLLbacks.
|-----------------------------------------------------------------------------
| A U T H O R I D E N T I T Y
|-----------------------------------------------------------------------------

1027




被折叠的 条评论
为什么被折叠?



