Как заставить работать DelphiX и UnDelphiX под Delphi6
Оформил: DeeCo
Автор: Michael Wilson
Введение
Эта статья расскажет вам как откомпилировать известные библиотеки
DelphiX и UnDelphiX под Delphi 6.0. Весь процесс займет не больше 15-20
минут, кроме того вы изучите общие приемы, которые могут помочь в
аналогичных ситуациях. Почему это статья, а не, скажем, патч или
дополнение к Delphi? Есть две причины:
1) По соглашению об использовании библиотеки ("TERMS AND CONDITIONS OF
USE"), нельзя рапространять измененные части дистрибутива DelphiX.
2) Действия, которые необходимо совершить для конвертации проекта под
Delphi 6.0, делают DelphiX несовместимой для использования в Delphi
3-5.
Предупреждение: пожалуйста, сохраните резервную копию всех
изменяемых файлов. Методы, изложенные здесь, протестированы на Delphi 6.0
Personal, если у вас другая редакция (например, Professional), могут
возникнуть непредвиденные проблемы.
Итак, перекомпиляция:
Шаг 1: Во-первых, нужно убедиться, что у вас установлена
последняя версия DelphiX. Ее можно скачать с этого сайта. После
распаковки архива запустите Delphi 6. Не запускайте файл
install_for?.exe!
Шаг 2: В меню File выберите пункт Open и откройте
DelphiX_for5.dpk. Delphi 6 преобразует пакет к 6-й версии.
Сохраните пакет как DelphiX_for6.dpk
Шаг 3: Попробуйте нажать кнопку Install. Компилятор покажет вам
ошибки, которые нужно исправить. Все ошибки относятся к модулю
DXRender.pas.
[ Замечание: если вы компилируете библиотеку UnDelphiX]
Данное изменение касается вас только в случае компиляции библиотеки
UnDelphiX. Этот фрагмент кода:
var
NilGUID: TGUID absolute 0;
… нужно заменить на …
var
NilGUID: TGUID;
[ Замечание: если вы компилируете библиотеку
UnDelphiX]
Шаг 4: Первый тип ошибок, которые нужно исправить - это ошибка
"Operand Size Mismatch". Всего должно быть около 40-50 ошибок такого типа.
Исправить ее очень легко:
mov eax, Dest;
add eax, TDXRMachine_Color.R + 1 // bad statement
... заменяется на ...
mov eax, Dest;
add eax, BYTE(TDXRMachine_Color.R + 1) // good statement
Этот фрагмент просто извлекает младшие 8 бит TDXRMachine_Color.R - вам
нужно исправить все строки, где есть ссылка на TDXRMachine_Color. Это
делается очень легко с помощью пункта меню Search -> Replace...
Шаг 5: Второй тип ошибок, требующих исправления, - это "Inline
Assember Syntax". Всего будет порядка 10-20 ошибок этого типа и они всегда
возникают, если в исходном тексте есть упоминание об _AddTable или
_SubTable. Исправляется ошибка также просто:
movzx edx, byte[offset _AddTable + edx + ebx]
... заменяется на ...
movzx edx, byte[offset(_AddTable + edx + ebx)]
После пройденных шагов компиляция должна заканчиваться только с одной
фатальной ошибкой и одним предупреждением.
Шаг 6: Последняя и самая неприятная ошибка, связанная с модулем
DsgnIntf.pas. Из-за нее не компилируется модуль DxReg.pas библиотеки
DelphiX.
Есть два способа исправить ошибку:
1) Delphi Personal: во-первых, удалите все строки под
объявлениями типов в DXReg.Pas. Затем удалите ссылки на
RegisterComponentEditor и RegisterPropertyEditor в процедуре Register.
Наконец, удалите весь код, который находится ниже процедуры
RegisterComponents (убедитесь, что модуль по-прежнему заканчивается
"end."). После вышеописанных действий модель DXReg.Pas должен выглядеть
вот так:
unit DXReg;
interface
uses
Windows, SysUtils, Classes, Forms, Dialogs, Graphics, TypInfo,
DXDraws, DXSounds, DIB, Wave, DXInput, DXPlay, DXSprite,
DXClass;
procedure Register;
implementation
const
SNone = '(None)';
SSettingImage = '&Image...';
SSettingWave = '&Wave...';
SDXGFileFilter = 'DXG file(*.dxg)|*.dxg|All files(*.*)|*.*';
SDXGOpenFileFilter =
'DXG file(*.dxg)|*.dxg|Bitmap file(*.bmp)|*.bmp|All files(*.*)|*.*';
SDXWFileFilter = 'DXW file(*.dxw)|*.dxg|All files(*.*)|*.*';
SDXWOpenFileFilter =
'DXW file(*.dxw)|*.dxw|Wave file(*.wav)|*.wav|All files(*.*)|*.*';
SSinglePlayer = '&Single player';
SMultiPlayer1 = 'Multi player &1';
SMultiPlayer2 = 'Multi player &2';
SOpen = '&Open...';
SSave = '&Save..';
procedure Register;
begin
RegisterComponents('DelphiX',
[TDXDraw,
TDXDIB,
TDXImageList,
TDX3D,
TDXSound,
TDXWave,
TDXWaveList,
TDXInput,
TDXPlay,
TDXSpriteEngine,
TDXTimer,
TDXPaintBox]);
end;
end.
С таким решением проблемы вы не сможете использовать редактор свойств,
включенный в DelphiX.
2) Delphi Professional: решение проблемы с профессиональной
версией Delphi была подсказана Tommy "QuazzeMan" Jonsson:
a) В модуле DXReg.pas замените ссылку на DsgnIntf в списке USES на
DesignIntf. b) Добавьте DesignEditors в список USES модуля
DXReg.Pas c) Добавьте DesignIDE в секцию REQUIRED
пакета
Шаг 7: Все, можно наслаждаться работой DelphiX и UnDelphiX в
шестой версии Delphi.
|