Академия новичков:
[UDF Series 4]: передача и возврат данных в UDF, написанную на Delphi.
перевод Уортона
Автор: Крис Левеск, Тина Граббе, Бретт Бэнди
-------------------------------------------------- ----------------------------------
[Заявление переводчика]:
Ранее я перевел несколько статей о написании UDF. Хотя некоторые друзья, возможно, получили от них небольшую помощь, они могут быть не знакомы с UDF.
Есть еще некоторые проблемы с пониманием. Сегодня я переведу еще две статьи, обе из системы mer (http://www.mers.com).
Да, заинтересованные друзья могут просмотреть исходный текст.
[аргумент]:
Когда динамическая библиотека не принимает особых мер предосторожности для защищенных значений данных, наша UDF имеет результаты данных со значениями параметров или возвращаемыми значениями.
Может быть результатом защищенного исключения или ошибки.
[Решение]:
Каждое значение даты хранится в двух 32-битных целочисленных типах: целое число со знаком, представляющее дату, и числовое значение.
Беззнаковое целое время. Используйте код Delphi, чтобы определить эту структуру (isc_quad) и указатель на структуру (pisc_quad):
тип
{межбазовая запись даты/времени}
isc_quad = запись
isc_quad_high: целое число // дата;
isc_quad_low: кардинал; // время;
конец;
pisc_quad = ^isc_quad;
Чтобы защитить возвращаемое значение, объявите потокобезопасную переменную isc_quad вне определения функции, чтобы она содержала возвращаемое значение (если возвращаемое значение
это данные типа даты).
тредвар
tempquad: isc_quad;
Затем напишите свою функцию так, чтобы результат указывал на переменную потока.
//определяем функцию
// эта функция добавляет количество дней к существующей дате.
функция dayadd (вар дни: целое число; ibdate pisc_quad): pisc_quad экспорт;
начинать
tempquad.isc_quad_high := ibdate^.isc_quad_high + дни;
tempquad.isc_quad_low := ibdate^.isc_quad_low;
результат: = @tempquad;
конец;
Автор: mer Systems Inc.. http://www.mers.com