我试图包含自己的.dll文件,并将其函数导出到CAPL脚本中。
我确信我已经正确地编写了我的.dll文件,下面是相关的代码,其中一些代码是从文档中复制/粘贴的:
#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 DLL下在模拟和测量模式下添加了.dll文件。该文件位于exec32安装的CANoe文件中,只是为了确保(以及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,则警告无法找到该文件。我已经编辑了LAD.dll的权限,以允许任何程序完全修改访问。
我意识到这可能有点模糊,但我非常希望能在这件事上提供任何帮助。我真的把头发拔出来了,因为我觉得我做的一切都是正确的。
发布于 2020-06-26 11:37:22
警告2102 at (-1,-1):无法打开C:\Program \Vector 10.0\Exec64\LAD.dll
造成这种错误的一个可能原因是您混合了32位和64位。记住,64位应用程序不能直接加载32位dll。32位应用程序和64位dll也是如此。你不能把这些混在一起。
其他可能性可能是损坏的dll、可能缺少dll的依赖dll或可能缺少插件机制所需的导出函数。
在这种情况下,在注释中验证了问题是32位和64位可执行文件的混合。
https://stackoverflow.com/questions/62580358
复制相似问题