dll 中的输入无效<dllname.dll>但我<functionname>没有看到错误
Invalid type in dll <dllname.dll><functionname> but I don't see the error
CAPL_DLL_INFO4 table[] = {
{CDLL_VERSION_NAME, (CAPL_FARCALL)CDLL_VERSION, "", "", CAPL_DLL_CDECL, 0xabcd, CDLL_EXPORT },
...
{"dllTEST",(CAPL_FARCALL)GetAttribute,"CAPL_DLL","...",'I', 5, "IIICI", " 01 01 01100 01",{ "x","x","x","x","x" } },
...
{0, 0}
};
CAPLEXPORT CAPL_DLL_INFO4 far * caplDllTable4 = table;
这是我在源文件中的 CAPL 导出表,它是用 c++ 编写的,编译时没有错误或警告 *.dll。函数接口在我的定义和原型中如下所示:
int CAPLEXPORT far CAPLPASCAL GetAttribute(int16 a, int16 b, int16 c, char d[], int16 e);
在 CANoe 中成功实现 *.dll 后,我在 CANoe 中出现编译错误:
CAPL node 'ECU 1': Compilation of '..ecu.can' failed with error(s)
Invalid type in DLL ..abc.dll, function dllTEST.
我错过了一些明显的东西吗?函数中使用的类型都精细地转换为 CAPL 符合类型,在第 15 页的 pdf 中,您可以阅读有关错误的信息:
编译 CAPL 程序时会捕获此错误。CAPL 导出表中定义的函数不正确。大多数情况下,它是 CAPL 导出表中的参数设置。
根据"实现和集成 CAPL DLL"手册,函数声明和函数表应如下所示:
long CAPLEXPORT far CAPLPASCAL GetAttribute(long a, long b, long c, char d[], long e);
CAPL_DLL_INFO table[] = {
{CDLL_VERSION_NAME, (CAPL_FARCALL)CDLL_VERSION, CAPL_DLL_CDECL, 0xabcd, CDLL_EXPORT},
...
{"dllTEST", (CAPL_FARCALL)GetAttribute, 'L', 5, "LLLCL", " 00 00 00 01 00"},
...
{0, 0}
};
unsigned long CAPLEXPORT __cdecl caplDllGetTable(void)
{
return (unsigned long)table;
}
解释
由于只有第 4 个参数 (
d
) 是数组(1 维),因此数组深度定义为:" 00 00 00 01 00"
请勿使用
int16
。使用表 3(函数参数和返回值数据类型)中所述的类型。由于int
和char
只能在数组大小 !=0 时使用,因此我们使用long
。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- EASTL矢量<向量<int>>连续的
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll