Я сделал быстрый порт , и в настоящее время у меня он в основном работает , этого вполне достаточно для работы включенной демонстрации Delphi. Моя первая попытка потерпела неудачу, когда я пропустил некоторые изменения строки -> ansistring в ДЕМО-КОДЕ, что привело к сбою функции демонстрационного кода PadCH
. После того, как я это исправил, демонстрационная и лежащая в ее основе библиотека кажутся функциональными, по крайней мере, для чтения, но я еще не тестировал написание, изменение и создание файлов. Приведенный выше файл в демоверсии был создан в более ранней версии, поэтому, по крайней мере, он совместим с бинарным чтением. Я не удивлюсь, если будет много ошибок, проблем с повреждением данных и т. Д., Поэтому, пожалуйста, не используйте этот код в производстве, или если вы это сделаете, вы делаете это на свой страх и риск.
Моя работа здесь: размещена на Microsoft Skydrive (4,3 мегабайта, ZIP)
(имя файла tpbtreefiler_xe2_v2.zip)
Обновление Функция IsamUnpack находится в ISAMWORK.INC.
Update2 Похоже, что ОП обнаружил, что добавление некоторой поддержки ifdef-version-constant вызывает включение {$ R-} и некоторых флагов выравнивания, которые также необходимы для библиотеки работать правильно. Могу ли я предложить следующий другой способ объявления в BTDEFINE.INC, который позволяет обойти классический Delphi «разрывать каждый раз, когда мы меняем версии компилятора Delphi», используя сравнение, которое не будет нарушаться в следующем выпуске Delphi:
{$IF CompilerVersion > 20.0 }
{ Keep working from Delphi 2009 UP}
{$DEFINE UsingDelphi}
{$A-} {align data on byte boundaries}
{$B-} {short circuit boolean evaluation}
{$H+} {long string support}
{$I-} {suppress I/O checking}
{$J+} {writeable typed constants}
{$P-} {do not allow open string parameters}
{$Q-} {overflow checking off}
{$R-} {range checking off}
{$T-} {no type checked pointers with @}
{$V-} {no var string checking}
{$X+} {extended syntax on}
{$DEFINE Delphi2006}
{$DEFINE Delphi1Plus}
{$DEFINE Delphi2Plus}
{$DEFINE Delphi3Plus}
{$DEFINE Delphi4Plus}
{$DEFINE Delphi5Plus}
{$DEFINE Delphi6Plus}
{$DEFINE Delphi7Plus}
{$DEFINE Delphi2005Plus}
{$DEFINE Delphi2006Plus}
{$ENDIF}
Обновление 3 Я подозреваю, что в коде все еще есть проблемы с портированием, которые могут привести к потере данных и повреждению файла данных. Вот пример, где число записей (которое должно быть числом в диапазоне около 50 в моем демонстрационном приложении) сообщается как число> 1 миллион, что явно недопустимо.