1. 创建第一个DLL并调用加法函数
任务目标
创建一个C++动态链接库(DLL),导出加法函数 Add,并在CAPL脚本中通过外部函数声明调用该DLL,实现两个整数的相加并输出结果。
环境准备
- Windows系统,安装Visual Studio(本文以VS2019为例,其他版本操作类似)
- CANoe(本文以CANoe 11.0为例)
实现步骤
1. 创建C++ DLL工程并导出加法函数
在Visual Studio中新建“动态链接库(DLL)”项目,将以下代码保存为 dll_add.cpp:
// dll_add.cpp
#include <windows.h>
extern "C" __declspec(dllexport) int Add(int a, int b)
{
return a + b;
}
// 可选:DLL入口点(非必需)
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
编译生成 dll_add.dll(注意选择与CANoe位数一致的平台,通常为x64)。
2. 将DLL放置到CANoe可访问目录
将生成的 dll_add.dll 复制到CANoe工程目录下,或直接放到系统PATH包含的目录(如 C:\Windows\System32)。推荐放在CANoe工程目录,便于管理。
3. 编写CAPL脚本调用DLL
在CANoe中新建CAPL程序,输入以下代码:
// CAPL脚本:调用DLL中的Add函数
char dllPath[256] = "dll_add.dll"; // DLL文件名或完整路径
// 声明外部函数原型
extern int Add(int a, int b);
on start
{
int result;
int x = 15;
int y = 27;
// 调用DLL中的加法函数
result = Add(x, y);
write("调用DLL加法函数: %d + %d = %d", x, y, result);
}
4. 运行与验证
- 在CANoe中加载包含上述CAPL脚本的节点。
- 点击“运行”按钮启动仿真。
- 观察Write窗口输出。
预期输出:
调用DLL加法函数: 15 + 27 = 42
通过条件:Write窗口显示上述输出,且无错误信息,说明DLL加载成功、函数调用正确。
常见问题
- DLL加载失败(错误码193/126):检查DLL位数是否与CANoe一致(x86/x64),确认DLL路径正确。
- 函数未找到:确认导出函数使用了
extern "C"且未加__stdcall(除非CAPL声明中显式指定调用约定)。 - CAPL编译报错:检查函数声明是否与DLL导出名称完全一致(大小写敏感)。
关键点说明
- 使用
extern "C"防止C++名称修饰,确保导出函数名在DLL中保持为Add。 - CAPL中通过
extern关键字声明外部函数,运行时CANoe自动从已加载的DLL中查找符号。 - DLL需在CAPL执行前位于系统可搜索路径中,否则需在
dllPath中指定完整路径。