Delphi Form (DFM) К тексту

2

Как преобразовать формы Delphi DFM из двоичного формата в текстовый формат с помощью С#?

Теги:

3 ответа

15
Лучший ответ

Лучший способ, вероятно, вызвать CONVERT.EXE, приложение командной строки, включенное в Delphi. Вот пример в Delphi. Вы можете сделать то же самое в С#.

  • 1
    Совет: Свяжите тип файла * .DFM с CONVERT.EXE. Таким образом, вы можете выбрать несколько DFM-файлов в проводнике и выбрать «Открыть с помощью Convert» в контекстном меню.
3

Я использую эти четыре метода для проверки формата файла DFM и преобразования следующим образом:

function IsDFMStreamBinary( AStream: TMemoryStream ): Boolean;
{ Returns true if dfm file is in a binary format }
var
  F: TMemoryStream;
  B: byte;
begin
  B := 0;
  F := TMemoryStream.Create;
  F.LoadFromStream( AStream );
  try
    F.read( B, 1 );
    Result := B = $FF;
  finally
    F.Free;
  end;
end;

function DfmFile2Stream( const ASrc: string; ADest: TStream ): Boolean;
{ Save dfm to stream }
var
  SrcS: TFileStream;
begin
  SrcS := TFileStream.Create( ASrc, fmOpenRead or fmShareDenyWrite );
  try
    ObjectResourceToText( SrcS, ADest );
    Result := True;
  finally
    SrcS.Free;
  end;
end;

procedure Txt2DFM( ASrc, ADest: string );
{ Convert Text to DFM }
var
  SrcS, DestS: TFileStream;
begin
  SrcS := TFileStream.Create( ASrc, fmOpenRead );
  DestS := TFileStream.Create( ADest, fmCreate );
  try
    ObjectTextToResource( SrcS, DestS );
  finally
    SrcS.Free;
    DestS.Free;
  end;
end;

function Dfm2Txt( const ASrc, ADest: string ): boolean;
{ Convert a binary DFM to text }
var
  ASrcS, ADestS: TFileStream;
begin
  ASrcS := TFileStream.Create( ASrc, fmOpenRead );
  ADestS := TFileStream.Create( ADest, fmCreate );
  try
    ObjectResourceToText( ASrcS, ADestS );
    Result := True;
  finally
    ASrcS.Free;
    ADestS.Free;
  end;
end;
  • 0
    Я бы проголосовал, если бы вы не проигнорировали часть вопроса «от C #».
  • 0
    Спасибо, но мне нужен код C #, а не Delphi
0

Двойной файл DFM Delphi - это, во всяком случае, двоичное представление объекта.

Правильный способ выполнения задания - написать эгоистичную утилиту командной строки С# (больше не нужно никакой внешней зависимости), основываясь на знании формата самого двоичного файла DFM.

Если формат не разглашается, выполнение обратного проектирования должно быть осуществимым:

  • Исходный код ObjectResourceToText доступен (Classes.pas).
  • Также доступны конвертеры (от двоичного к тексту и наоборот) для генерации ввода, требуемого от инструментов.
  • 0
    На вопрос более чем адекватно ответили за год до вашего комментария, что он добавляет?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню