Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


E140 + lusbapi.lib + mingw32 (gcc под win)

Вы не вошли.

 Поиск | Регистрация | Вход 

d-e-n
28.10.2005 03:18:10
#1

Гость

E140 + lusbapi.lib + mingw32 (gcc под win)

Программа собрана компилятором mingw32 с lusbapi.lib для VisualStudio (борландовскую либу линковщик не распознал), вылетает на:
hE140Device = static_cast<ILE140*>(CreateInstance("E140"));
ошибка сегментации, обращение по адресу 80000001

При сборке того же кода с помощью VisualStudio всё работает нормально.

Подозреваю, что библиотеку нужно пересобрать с помощью mingw32. Среди файлов, поставленных с модулем нашел только исходник для платы E440. Где можно достать исходники библиотеки для E140, или скомпилированную библиотеку для этого компилятора.

Спасибо.

DKorolkov
28.10.2005 08:46:26
#2

Гость

Re: E140 + lusbapi.lib + mingw32 (gcc под win)

> Среди файлов, поставленных с модулем нашел только исходник для платы E440. Где можно достать исходники библиотеки для E140

На L-Card CD каталог /USB/E14-XXX/E14-140/DLL

kodorkin
28.10.2005 11:30:35
#3

Гость

Re: E140 + lusbapi.lib + mingw32 (gcc под win)

> ошибка сегментации, обращение по адресу 80000001
1. кто выдает такое сообщение? компилятор, линкер, отладчик?

2. можно обойтись и без библиотеки импорта -lusbapi.lib, если использовать "run-time dynamic linking". посмотрите описание win32api-функций LoadLibrary() и GetProcAddress().

d-e-n
29.10.2005 01:23:55
#4

Гость

Re: E140 + lusbapi.lib + mingw32 (gcc под win)

<DKorolkov> Нашел, спасибо.
<kodorkin> Ошибку выдаёт отладчик.
>2. можно обойтись и без библиотеки импорта -lusbapi.lib, если использовать "run-time dynamic linking".
Да, подумав так и сделал, использовал код lusbapi как пример и сделал у себя примерно так же. Получилось довольно громоздко, но вроде работает.

ПС. Немного не понял суть вот этого куска из функции TLE140::GET_CUR_ADC_PARS:
    DWORD FREQ=md.QuartzFrequency;                              if(FREQ>24e6 || FREQ<1e6) FREQ=16e6;

Компилятор ругается, что сравнивается DWORD и double (4 и 8 байт). Что имеется в виду под 24e6? 24000000?

И, еще - получается, перед тем как вызвать эту функцию, _необходимо_ считать LBIOS модуля, чтобы была заполнена структура md?

Еще раз спасибо.

kodorkin
29.10.2005 12:49:47
#5

Гость

Re: E140 + lusbapi.lib + mingw32 (gcc под win)

>Что имеется в виду под 24e6? 24000000?
да.
борлондовский компилятор проглатывает это молча и при этом все работает верно.
хотя конечно правильнее было бы написать
if(FREQ>24000000l || FREQ<1000000l) FREQ=16000000l;
в следующем релизе библиотеки поправим. спасибо.

> И, еще - получается, перед тем как вызвать эту функцию, _необходимо_ считать LBIOS модуля, чтобы была заполнена структура md?

да - это верно. но точнее не "считать LBIOS", а получить служебную информацию - описание модуля при помощи функции GET_MODULE_DESCR().
если обратите внимание, об этом написанно в документации и так сделаны все примеры.

d-e-n
31.10.2005 16:29:50
#6

Гость

Re: E140 + lusbapi.lib + mingw32 (gcc под win)

Спасибо