【问题标题】:How to access .dll file via CAPL?如何通过 CAPL 访问 .dll 文件?
【发布时间】:2025-12-17 17:50:01
【问题描述】:

我已经尝试了以下代码。

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}
}; 

对于此代码,我收到“解析错误”。我该如何解决?我需要包含一个头文件吗?

【问题讨论】:

标签: capl


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您似乎缺少 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;
    

    【讨论】: