Форум: "Потрепаться";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизНаезд на авторов толстой книги Найти похожие ветки
← →
palva © (2005-01-10 23:45) [0]Из книги Тейксейра Пачеко Delphi 5 Руководство разработчика.
т. 1 стр. 361 и далее:
PenniesInt.pas
{
Copyright й 1998 by Delphi 4 Developer"s Guide - Xavier Pacheco and Steve Teixeira
}
unit PenniesInt;
{ Interface routine for PENNIES.DLL }
interface
type
{ This record will hold the denominations after the conversion have
been made }
PCoinsRec = ^TCoinsRec;
TCoinsRec = record
Quarters,
Dimes,
Nickels,
Pennies: word;
end;
{$IFNDEF PENNIESLIB}
{ Declare function with export keyword }
function PenniesToCoins(TotPennies: word; CoinsRec: PCoinsRec): word; StdCall;
{$ENDIF}
implementation
{$IFNDEF PENNIESLIB}
{ Define the imported function }
function PenniesToCoins; external "PENNIESLIB.DLL" name "PenniesToCoins";
{$ENDIF}
end.
PenniesLib.dpr
{
Copyright й 1999 by Delphi 5 Developer"s Guide - Xavier Pacheco and Steve Teixeira
}
library PenniesLib;
{$DEFINE PENNIESLIB}
uses
SysUtils,
Classes,
PenniesInt;
function PenniesToCoins(TotPennies: word; CoinsRec: PCoinsRec): word; StdCall;
begin
Result := TotPennies; // Assign value to Result
{ Calculate the values for quarters, dimes, nickels, pennies }
with CoinsRec^ do
begin
Quarters := TotPennies div 25;
TotPennies := TotPennies - Quarters * 25;
Dimes := TotPennies div 10;
TotPennies := TotPennies - Dimes * 10;
Nickels := TotPennies div 5;
TotPennies := TotPennies - Nickels * 5;
Pennies := TotPennies;
end;
end;
{ Export the function by name }
exports
PenniesToCoins;
end.
Не нужно разбираться в программе, хотя здесь тоже могут быть вопросы к комментарию { Declare function with export keyword }, который не соответствует реальному описанию функции, но это мелочи.
В главной программе указано {$IFNDEF PENNIESLIB} и авторы считают, что этот макрос будет использован в юните PenniesInt, который подключается немного ниже через unit. Ну типа, как в С часто пишут:
#define STRICT
#include <windows.h>
Я долго протирал глаза, потом почти в это поверил, придумывал, как это можно реализовать в юните, сел, стал пробовать и с облегчением понял, что это одно из заблуждений многоуважаемых (без иронии) авторов. Взять например с. 83, где авторы говорят о значениях Unassigned и Null:
Еще одно отличие этих значений состоит в том, что любая попытка вычиления выражений с пустым вариантом будет приводить к возникновению исключительной ситуации: "некорректная операция с вариантом". Однако этого не будет при использовании в выражении варианта со значением Null - результат вычисления любого выражения, в состав которого входит значение Null, всегда будет равен Null.
Ни то ни другое утверждение не соответствует реальности: Пустые варианты приводятся к нулю или пустой строке. А вычисления с Null подчиняются правилам, принятым в SQL и вовсе не всегда дают Null.
Может быть я неправ? А может быть это - давно известные приколы?
← →
palva © (2005-01-10 23:46) [1]Поправка
В главной программе указано {$DEFINE PENNIESLIB}
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c