我尝试过以下代码。
int CAPLEXPORT far CAPLPASCAL capl_visa_init(double arg)
{
return visa_init(arg);
}
CAPL_DLL_INFO CAPL_DLL_INFO_LIST[] =
{
{"my_visa_init", (CAPL_FARCALL)capl_visa_init, 'D', 1, "F", "\000"},
....
{0,0}
};
对于这段代码,我得到'Parse error'。我该如何解决?我是否需要包含头文件?
答案 0 :(得分:1)
为了使CAPL编译器和CAPL浏览器能够识别DLL,您必须将其链接到CAPL程序。
为此,您可以在CANoe的“选项”对话框中输入DLL。在这种情况下,DLL将可用于您拥有的所有CAPL程序。另一方面,您可以使用#pragma library
命令在CAPL程序的includes部分输入DLL。在这种情况下,它只能用于此程序。
答案 1 :(得分:0)
似乎您在此缺少CAPL DLL导出表中定义的三个元素(功能类别,文本,参数名称)
已创建的函数可以借助于表函数(CAPL_DLL_INFO_LIST)
导出为CAPL代码。
表的第一行包含版本信息。必须以以下方式定义该行:
{CDLL_VERSION_NAME, (CAPL_FARCALL)CDLL_VERSION, "", "", CAPL_DLL_CDECL, 0xabcd, CDLL_EXPORT },
示例:使用导出表
void CAPLEXPORT far CAPLPASCAL appPut(unsigned long x)
{
data = x;
}
CAPL_DLL_INFO4 table[] = {
{CDLL_VERSION_NAME, (CAPL_FARCALL)CDLL_VERSION, "", "", CAPL_DLL_CDECL, 0xabcd, CDLL_EXPORT },
{"dllPut", (CAPL_FARCALL)appPut, "CAPL_DLL","This function will save data from CAPL to DLL memory",'V', 1, "D", "\000", {"x"}},
{0, 0}
};
CAPLEXPORT CAPL_DLL_INFO4 far * caplDllTable4 = table;