CAPL_DLL_INFO4 table[] = {
{CDLL_VERSION_NAME, (CAPL_FARCALL)CDLL_VERSION, "", "", CAPL_DLL_CDECL, 0xabcd, CDLL_EXPORT },
...
{"dllTEST",(CAPL_FARCALL)GetAttribute,"CAPL_DLL","...",'I', 5, "IIICI", "\001\001\001\100\001",{ "x","x","x","x","x" } },
...
{0, 0}
};
CAPLEXPORT CAPL_DLL_INFO4 far * caplDllTable4 = table;
这是我在源文件中的 CAPL 导出表,它是用 c++ 编写的,并且编译为 *.dll 时不会出现错误或警告。函数接口在我的定义和原型中是这样的:
int CAPLEXPORT far CAPLPASCAL GetAttribute(int16 a, int16 b, int16 c, char d[], int16 e);
成功将 *.dll 实现到 CANoe 后,我在 CANoe 中得到编译错误:
CAPL node 'ECU 1': Compilation of '..\ecu.can' failed with error(s)
Invalid type in DLL ..\abc.dll, function dllTEST.
我错过了一些明显的东西吗?函数中使用的类型都被精细地转换为符合 CAPL 的类型,在第 15 页的这个pdf 中,您可以阅读有关错误的信息:
编译 CAPL 程序时会捕获此错误。CAPL 导出表中定义的函数不正确。大多数时候是 CAPL 导出表中的参数设置。