Главная страница
    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.039 c
1-1106019429
ZAlex
2005-01-18 06:37
2005.01.30
Переход на Delphi 2005


6-1100523164
va
2004-11-15 15:52
2005.01.30
Дозвон и сброс


14-1105456044
olookin
2005-01-11 18:07
2005.01.30
Как получить список всех ресурсов, открытых для доступа?


3-1104240741
Aleksandr.
2004-12-28 16:32
2005.01.30
Киньте ссылкой на dll типа локального fireBird!


14-1105635943
Tankist
2005-01-13 20:05
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский