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

Ошибка в заголовке LTR_GetListOfIPCrates в файле ltrapi.pas ?

Вы не вошли.

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

mvg
09.07.2014 15:07:22
#1

Участник
Здесь с 09.07.2014
Сообщений: 3

Ошибка в заголовке LTR_GetListOfIPCrates в файле ltrapi.pas ?

Функция определена GetListOfIPCrates  как   

Function LTR_GetListOfIPCrates(ltr:pTLTR; max_entries:DWORD; ip_net:DWORD; ip_mask:DWORD; entries_foundDWORD:Pointer; entries_returnedDWORD:Pointer;  info_array:TIPCRATE_ENTRY):integer; external 'ltrapi.dll';

последний параметр должен быть задан как

var info_array:TIPCRATE_ENTRY

иначе он передается по значению!

10.07.2014 10:06:20
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,293

Re: Ошибка в заголовке LTR_GetListOfIPCrates в файле ltrapi.pas ?

Да, согласен, что неправильно. Правда это массив структур, а не одна структура, поэтому просто var тоже не совсем правильно. Думаю правильнее сделать как в например LTR210_ProcessData() с параметром data_info в ltr210api.pas . Я проверю сегодня и сделаю тогда исправление.

10.07.2014 13:23:29
#3

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,293

Re: Ошибка в заголовке LTR_GetListOfIPCrates в файле ltrapi.pas ?

Я сделал вариант через массив. Сделал на основе файла из pascal2 (где файлы совместимы как с Delphi7, так и с XE).
Массив может быть как статический заданного размера, так и динамический. Функция не принимает параметр max_entries, так как размер берется из размера info_array.

Можно перенести и в старый вариант (в директории pascal), нужно скопировать только новую реализация LTR_GetListOfIPCrates, _get_ip_list и объявление p_crate_ipentry_array.

Здесь http://www.lcard.ru/forums/img/members/ … delphi.zip можно взять измененные файлы и пример с динамическим массивом, где первый раз функция вызывается для получения количества записей, затем изменяется размер на нужное значение, и вызывается снова.
Также замечу, что я стараюсь как можно меньше использовать тип Pointer, который использовался необоснованно, и использовать по максимому var, out и array. Обращаю внимание, что часть функций есть уже и в старом варианте и в новом.
Попозже внесу и в основной установщик, пока можете посмотреть и сделать свои замечания или предложения.

mvg
10.07.2014 21:54:54
#4

Участник
Здесь с 09.07.2014
Сообщений: 3

Re: Ошибка в заголовке LTR_GetListOfIPCrates в файле ltrapi.pas ?

Благодарю! По сути, насколько я понимаю, в данном случае var и out эквивалентны и соотв. записи на СИ *TIPCRATE_ENTRY. В любом случае теперь функция работает правильно.

11.07.2014 09:14:11
#5

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,293

Re: Ошибка в заголовке LTR_GetListOfIPCrates в файле ltrapi.pas ?

var и out отличаются только тем, что out говорит, что эта переменная может быть не инициализирована перед передачей в функцию (с var должна быть в этом случае ошибка), а так да. Единственное, что как я говорил, здесь все же массив, а не одна структура, что в C выглядит одинаково, а тут несколько отличается. Спасибо за найденную ошибку.

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск