CANoe - не удалось открыть .dll в скрипте CAPL

Я пытаюсь включить свой собственный файл .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, чтобы разрешить любой программе полный доступ на изменение.

Я понимаю, что это может быть немного неясно, но я был бы очень признателен за любую помощь по этому вопросу. Я действительно выдергиваю волосы, потому что мне кажется, что я все делаю правильно.


person Ben    schedule 25.06.2020    source источник
comment
Невозможно открыть, это может означать, что вы смешиваете 32 и 64 бит.   -  person drescherjm    schedule 25.06.2020
comment
@drescherjm Большое спасибо! Я собирался создать 32-битную .dll, но с использованием 64-битного CANoe, вы хотите опубликовать ее в качестве ответа, чтобы я мог ее принять?   -  person Ben    schedule 26.06.2020


Ответы (1)


Предупреждение 2102 в (-1, -1): не удалось открыть C: \ Program Files \ Vector CANoe 10.0 \ Exec64 \ LAD.dll

Одна из возможных причин этого типа ошибки заключается в том, что вы смешиваете 32- и 64-разрядные версии. Помните, что 64-битное приложение не может напрямую загрузить 32-битную dll. То же самое с 32-битным приложением и 64-битной dll. Вы не должны смешивать их.

Альтернативными вариантами могут быть поврежденная dll, возможные отсутствующие зависимые библиотеки DLL или возможные отсутствующие экспортируемые функции, которые могут потребоваться для механизма подключаемого модуля.

В этом случае в комментариях было подтверждено, что проблема заключалась в смешивании 32- и 64-битных исполняемых файлов.

person drescherjm    schedule 26.06.2020