关于CAPL中对dll的调用操作

转自:https://blog.csdn.net/weixin_44536482/article/details/93911832

关于CAPL中对dll的调用操作

1、操作步骤

        在CANoe中对节点的编程是通过CAPL(Communication Access Programming Laguage)语言进行的。但如果是我们之前已经完成的功能模块,并且想在CAPL中进行调用时,可以在固定模板上按照固定格式添加自己想要被调用的函数,生成可被CAPL调用的dll文件;再在CAPL编程界面下的”includes”中,通过”#pragma library”指令导入我们前面生成的dll文件;此时就可以直接对dll文件中的接口函数进行调用了。具体操作步骤如下:

        (1)、生成dll的工程模板在我们安装CANoe时就自动生成了,以Win 7系统、9.0版本的CANoe为例,该工程路径如下

C:\Users\Public\Documents\Vector\CANoe\9.0\CANoe Sample Configurations\Programming\CAPLdll\VS 2005 Project

在这里插入图片描述
        
        (2)、打开工程,将自己想要被调用的接口函数的定义及声明写入到”capldll.cpp”这个文件中;

        (3)、按照固定格式在”capldll.cpp”文件的”table”结构体数组中加入我们新增的接口函数描述;格式如下:

typedef struct CAPL_DLL_INFO4{
  char              cdlName[MAX_CDL_NAME2];        // 在CAPL中调用时显示的函数名
  CAPL_FARCALL      adr;                           // 函数地址,即vs工程中函数定义时的函数名
  const char*       categoryName;                  // 函数在CAPL中的所属目录,可以用于对函数的分类
  const char*       hintText;                      // 对该函数功能的描述介绍(在CAPL中显示)
  char              resultType;                    // 函数的返回值类型,用CAPL中的类型的首字母大写去表示
  int               parCount;                      // 函数的参数个数
  char              parTypes[MAXCAPLFUNCPARS_8_1]; // 函数的参数类型,用CAPL中的类型的首字母大写去表示
  unsigned char     array[MAXCAPLFUNCPARS_8_1];    // 函数的参数是否是数组:\001表示是数组;\000表示不是数组。默认则为\000
  const char*       parNames[MAXCAPLFUNCPARS_8_1]; // 函数显示的参数名(在CAPL中的声明介绍时)
} CAPL_DLL_INFO4;

在这里插入图片描述

        Ps:关于"resultType"(返回值的类型)、“parTypes[MAXCAPLFUNCPARS_8_1]”(参数的类型),这两个参数是以CAPL中数据类型的首字母大写来表示的;注意应与函数定义时的返回值类型、参数类型保持一致;否则该工程生成的dll文件在CAPL中是不能使用的。关于这两个参数可选的值如下(即CAPL中的数据类型):

符号代表的类型描述
VVoid空类型
Bbyte1字节的无符号整数
Wword2字节的无符号整数
Ddword4字节的无符号整数
Iint2字节的有符号整数
Llong4字节的有符号整数
Cchar1字节的字符
Ffloat8字节的浮点数

        
        (4)、将生成的dll文件拷贝到当前CANoe工程路径下,打开CANoe工程中”Simulation Setup”界面下节点的CAPL程序界面
在这里插入图片描述

        
        (5)、在CAPL编程界面下的”includes”中,通过如下指令导入我们刚刚生成的dll文件(”capldll.dll”);并进行编译保存

#pragma library("./capldll.dll")	//"./capldll.dll"表示当前路径下的"capldll.dll"这个文件

在这里插入图片描述

        
        (6)、此时在右边的”CAPL Functions" 显示栏下就会出现”capldll.dll”这一列;我们在第三点的操作中添加在table数组中的接口函数都会在这里显示出来。之后,我们就可以直接在CAPL中调用这些函数接口了(需要注意CAPL中没有指针,所以关于指针部分的使用都是定义为数组去操作的
在这里插入图片描述

        

2、示例

        (1)、假设我们要在CAPL中调用的函数接口如下

	int ChangeGb2312ToUtf8(
		char* NameOfGB2312,
		char* NameOfUtf8,
		unsigned int * LengthOfName,
		unsigned int * NumOfMessage)

        (2)、我们在"capldll.cpp"这个文件中对其进行定义及声明;并将其按照如下格式在"table"数组中添加为接口函数

{ "dllChangeGb2312ToUtf8", (CAPL_FARCALL)ChangeGb2312ToUtf8, "CAPL_DLL", "This function will Change GB2312 to Utf8", 'L', 4, "CCWW", "\001\001\001\001", { "NameOfGB2312", "NameOfUtf8", "LengthOfName1", "NumOfMessage1" } },

        (3)、编译生成dll文件,在CAPL编程中将该dll导入,此时可以看到其生成的函数接口介绍如下
在这里插入图片描述
        (4)、此时可以直接在CAPL中对这个接口函数进行调用了,例如:

	char NameOfGB2312[500];
    char NameOfUtf8[768];
    word LengthOfName[1];
    word NumOfMessage[1];
    byte Res;
  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值