Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.032 c
1-1105870546
Ilya___
2005-01-16 13:15
2005.01.30
Подскажите, как можно узнать какие ячейки выделенны в Excel?


3-1104160416
Sashok
2004-12-27 18:13
2005.01.30
Фильтрация


1-1106041608
ghg
2005-01-18 12:46
2005.01.30
передача параметров модальному окну


1-1105975582
Bobby Digital
2005-01-17 18:26
2005.01.30
MessageDlg


1-1105568578
nachinaushiy
2005-01-13 01:22
2005.01.30
Помогите кто-нибудь....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский