Я пытаюсь включить свой собственный файл .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 я добавил файл .dll в параметры - ›программирование -› CAPL 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, поскольку она не находит эту функцию.
Я прочитал всю документацию, касающуюся надстроек CANoe, и прочитал три существующих вопроса о переполнении стека с аналогичными проблемами, но безрезультатно. Если я перемещаю или переименовываю .dll, CAPL вместо этого предупреждает, что файл не может быть найден. Я отредактировал разрешения LAD.dll, чтобы разрешить любой программе полный доступ на изменение.
Я понимаю, что это может быть немного неясно, но я был бы очень признателен за любую помощь по этому вопросу. Я действительно выдергиваю волосы, потому что мне кажется, что я все делаю правильно.