如何通过CAPL访问.dll文件?

时间:2017-04-04 04:02:16

标签: capl

我尝试过以下代码。

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'。我该如何解决?我是否需要包含头文件?

2 个答案:

答案 0 :(得分:1)

为了使CAPL编译器和CAPL浏览器能够识别DLL,您必须将其链接到CAPL程序。 为此,您可以在CANoe的“选项”对话框中输入DLL。在这种情况下,DLL将可用于您拥有的所有CAPL程序。另一方面,您可以使用#pragma library命令在CAPL程序的includes部分输入DLL。在这种情况下,它只能用于此程序。

答案 1 :(得分:0)

似乎您在此缺少CAPL DLL导出表中定义的三个元素(功能类别,文本,参数名称) enter image description here

已创建的函数可以借助于表函数(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;