Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Преобразование формата MS BINARY в IEEE

"Использование, независимое от машинного уровня" не так просто в реализации с процессорами, выпущенными до Intel-го математического сопроцессора 80x87. Я не уверен в том, что процессоры 80x86 имели какие-либо родные инструкции для выполнения операций с плавающей точкой. По-видимости, поэтому Microsoft создал свой собственный формат для чисел с плавающей точкой; он сам осуществлял всю арифметику с помощью библиотеки времени выполнения. Сегодня 80x87 осуществляет такую арифметику автоматически, и IEEE теперь стандарт.

Delphi хранит следующие типы чисел с плавающей точкой в формате IEEE:

  Single      4 байт
  Double      8 байт
  Extended   10 байт
Обратите внимание на то, что тип Real (6 байт) отсутствует в данном списке. Я могу ошибаться, но мне кажется что тип Real - синтезированный в Pascal тип; он может без особых проблем существовать на процессорах ниже 80x87.

[В сторону: электронная справка Delphi сообщает, что по умолчанию (через директиву компилятора $N+), компилятор будет генерировать код для выполнения ВСЕХ операций с плавающей точкой, используя инструкции 80x87, включая тип Real. Также, для работы с типом Real, компилятор генерирует вызовы библиотеки времени выполнения, или же я полностью неправ в вышесказанном! :) ]

Во всяком случае, в электронной справке Visual Basic я увидел, что VB оперирует с типами данных Single и Double, которые также относятся к типу IEEE, и идентичны Delphi-типам Single и Double. Тем не менее, в справке отсутствует упоминание "Microsoft Binary Format".

Для того, чтобы разобраться в вопросе, я "опустился" до DOS и запустил QBasic, новую версию интерпретатора Microsoft QuickBasic, включаемую теперь в поставку DOS. Если мы посмотрим в электронную справку, то увидим следующее:

MKSMBF$ и MKDMBF$ преобразуют числа формата IEEE в "числовые строки" формата Microsoft-Binary, которые могут храниться в строковых переменных типа FIELD. CVSMBF и CVDMBF преобразуют эти строки обратно в числа формата IEEE.

MKSMBF$(выражение-единичной-точности!)
MKDMBF$(выражение-двойной-точности#)
CVSMBF (4-байтовая-числовая-строка)
CVDMBF (8-байтовая-числовая-строка)

   Функция     Возвращаемое значение

   MKSMBF$     4-байтовая строка, содержащая число в формате Microsoft-Binary-format
   MKDMBF$     8-байтовая строка, содержащая число в формате Microsoft-Binary-format
   CVSMBF      Число единичной точности в формате IEEE
   CVDMBF      Число двойной точности в формате IEEE
Эти функции могут оказаться полезными при поддержке файлов данных, созданных с помощью старых версий Basic.

Суммируя вышесказанное, можно дать 3 рекомендации для получения доступа к вашим "MetaStock"-файлам:

  1. Напишите вашу программу в QBasic/DOS
  2. Найдите замену (с учетом совместимости с Delphi) для функций преобразований, упомянутых выше.
  3. Напишите эти функции сами. Вы должны найти документацию для старых типов Single и Double, применявшихся в "Microsoft Binary Format", возможно в справочных файлах старых версий MS Basic.
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay