CANoe - 无法在 CAPL 脚本中打开 .dll
CANoe - Could not open .dll in CAPL script
我正在尝试包含我自己的 .dll 文件并将其功能导出到我的 CAPL 脚本中。
我很确定我已经正确编写了我的 .dll 文件,这里是相关代码,其中一些是 copy/pasted 来自文档:
#include "pch.h"
#include "CDLL.h"
long CAPLEXPORT far CAPLPASCAL addCAPL(long a, long b) {
return a + b;
}
#ifdef __BCPLUSPLUS__
#pragma warn -pin
#endif
// Define how to export functions to capl,
// Arg0 = name, arg1=function, arg2=return type, arg3=# of params, arg4=type of params, args5=depth of param if array (aboslutely useless as c++ cannot used 2+D arrays as params without knowing the dimensions)
CAPL_DLL_INFO CAPL_DLL_INFO_LIST[] = {
{CDLL_VERSION_NAME,(CAPL_FARCALL)CDLL_VERSION, CAPL_DLL_CDECL, 0xabcd,CDLL_EXPORT},
{"Add", (CAPL_FARCALL)addCAPL, 'L', 2, "LL", "\x0\x0"},
{0,0}
};
// Magic export table to capl function?
unsigned long CAPLEXPORT __cdecl caplDllGetTable(void)
{
return (unsigned long)CAPL_DLL_INFO_LIST;
}
我正在测试一个简单的加法器函数。包含所需的 CDLL.h,cpp 代码成功编译为 .dll (LAD.dll)。
在CANoe中,我在选项->编程->模拟和测量模式下的CAPL DLLs下添加了.dll文件。该文件位于 CANoe 安装的 exec32 文件中(以及 exec64)。
当我编译 CAPL 脚本时收到警告:
Warning 2102 at (-1,-1): Could not open C:\Program Files\Vector CANoe 10.0\Exec64\LAD.dll, . Logger.can
这意味着我无法在我的 CAPL 脚本中使用导出的 'Add()' 函数,因为它找不到该函数。
我已经阅读了所有关于CANoe插件的文档,并阅读了三个现有的类似问题的堆栈溢出问题无济于事。如果我移动或重命名 .dll,CAPL 会警告找不到该文件。我已经编辑了 LAD.dll 的权限以允许任何程序完全修改访问权限。
我知道这可能有点晦涩,但我将不胜感激任何对此事的帮助。我真的很紧张,因为感觉我做的一切都是正确的。
Warning 2102 at (-1,-1): Could not open C:\Program Files\Vector CANoe 10.0\Exec64\LAD.dll
出现此类错误的一个可能原因是您混用了 32 位和 64 位。请记住 64 位应用程序不能直接加载 32 位 dll。 32 位应用程序和 64 位 dll 也是如此。你不能混用这些。
其他可能性可能是损坏的 dll、可能缺少 dll 的依赖 dll 或可能缺少插件机制可能需要的导出函数。
在这种情况下,在评论中证实问题是 32 位和 64 位可执行文件的混合。
我正在尝试包含我自己的 .dll 文件并将其功能导出到我的 CAPL 脚本中。
我很确定我已经正确编写了我的 .dll 文件,这里是相关代码,其中一些是 copy/pasted 来自文档:
#include "pch.h"
#include "CDLL.h"
long CAPLEXPORT far CAPLPASCAL addCAPL(long a, long b) {
return a + b;
}
#ifdef __BCPLUSPLUS__
#pragma warn -pin
#endif
// Define how to export functions to capl,
// Arg0 = name, arg1=function, arg2=return type, arg3=# of params, arg4=type of params, args5=depth of param if array (aboslutely useless as c++ cannot used 2+D arrays as params without knowing the dimensions)
CAPL_DLL_INFO CAPL_DLL_INFO_LIST[] = {
{CDLL_VERSION_NAME,(CAPL_FARCALL)CDLL_VERSION, CAPL_DLL_CDECL, 0xabcd,CDLL_EXPORT},
{"Add", (CAPL_FARCALL)addCAPL, 'L', 2, "LL", "\x0\x0"},
{0,0}
};
// Magic export table to capl function?
unsigned long CAPLEXPORT __cdecl caplDllGetTable(void)
{
return (unsigned long)CAPL_DLL_INFO_LIST;
}
我正在测试一个简单的加法器函数。包含所需的 CDLL.h,cpp 代码成功编译为 .dll (LAD.dll)。
在CANoe中,我在选项->编程->模拟和测量模式下的CAPL DLLs下添加了.dll文件。该文件位于 CANoe 安装的 exec32 文件中(以及 exec64)。
当我编译 CAPL 脚本时收到警告:
Warning 2102 at (-1,-1): Could not open C:\Program Files\Vector CANoe 10.0\Exec64\LAD.dll, . Logger.can
这意味着我无法在我的 CAPL 脚本中使用导出的 'Add()' 函数,因为它找不到该函数。
我已经阅读了所有关于CANoe插件的文档,并阅读了三个现有的类似问题的堆栈溢出问题无济于事。如果我移动或重命名 .dll,CAPL 会警告找不到该文件。我已经编辑了 LAD.dll 的权限以允许任何程序完全修改访问权限。
我知道这可能有点晦涩,但我将不胜感激任何对此事的帮助。我真的很紧张,因为感觉我做的一切都是正确的。
Warning 2102 at (-1,-1): Could not open C:\Program Files\Vector CANoe 10.0\Exec64\LAD.dll
出现此类错误的一个可能原因是您混用了 32 位和 64 位。请记住 64 位应用程序不能直接加载 32 位 dll。 32 位应用程序和 64 位 dll 也是如此。你不能混用这些。
其他可能性可能是损坏的 dll、可能缺少 dll 的依赖 dll 或可能缺少插件机制可能需要的导出函数。
在这种情况下,在评论中证实问题是 32 位和 64 位可执行文件的混合。