При этом неизвестные классы загружаются как их известные предки.
Хмм... Правильно я понимаю что встречая имя неизвестного класса, система по этому имени находит ближайший известный предок?
А как это делается в общих чертах, если не секрет?
Модератор: Модераторы
При этом неизвестные классы загружаются как их известные предки.

 
 


 Поковыряться с Дельфи: редиска, оказывается, не знает типа QWord.
  Поковыряться с Дельфи: редиска, оказывается, не знает типа QWord.
но регистрация типов осуществляется парсеньем исходников программы
делаю подобную штуку.
 
 

 
 
  Type converter "SINGLE" -> "BYTE,SHORTINT,SMALLINT,WORD,LONGINT,LONGWORD,INT64,QWORD": 0041329Ch
  Type converter "SHORTINT,SMALLINT,LONGINT,INT64" -> "SINGLE": 004135D8h
  Type converter "BYTE,WORD,LONGWORD,QWORD" -> "SINGLE": 00413850h
  Type converter "DOUBLE" -> "BYTE,SHORTINT,SMALLINT,WORD,LONGINT,LONGWORD,INT64,QWORD": 00413380h
  Type converter "EXTENDED" -> "BYTE,SHORTINT,SMALLINT,WORD,LONGINT,LONGWORD,INT64,QWORD": 004134A0h
.......
Class "TTESTDATANEXT": field "B:LONGINT": Converting from "SINGLE".



type TArrayOfByte = array of byte;
Procedure NewDynArray(parray: pointer; Len, BaseTypeInd: integer);
var
  p: pointer;
begin
  pointer(parray^):= nil;
  SetLength(TArrayOfByte(parray^), Len * Types[BaseTypeInd].Size);
  if Len > 0 then  //high value in FreePascal, length  in Delphi
  {$ifdef fpc}
    dword((pointer(parray^) - 4)^):= Len - 1;
  {$else}
    dword(pointer(cardinal(parray^) - 4)^):= Len;
  {$endif}
end;   
 
 
 
 
  procedure ReadUnaligned(p: pointer; NumBytes: integer);
  var
    i: integer;
    w: dword{$ifdef fpc} = 0{$endif};
  begin
    {$ifndef fpc}
      w:=0;
    {$endif}
    i:= NumBytes div 4;
    if i > 0 then begin
      ReadBin(p, i); //оперирует 32-битными словами
      Inc(cardinal(p), i * 4);
    end;
    i:=NumBytes - i*4;
    if i > 0 then begin
      ReadDword(@w);
      move(w, p^, i);
    end;
  end;
procedure ReadUnaligned(p: pointer; NumBytes: integer);
  var
    i: integer;
    w: dword{$ifdef fpc} = 0{$endif};
  begin
    {$ifndef fpc}
      w:=0;
    {$endif}
    i:= 1 + ((NumBytes - 1) div 4);
    if i > 0 then begin
      ReadBin(p, i);
      Inc(cardinal(p), i * 4);
    end;
    i:=NumBytes - i*4;
    if i > 0 then begin
      ReadDword(@w);
      move(w, p^, i);
    end;
  end; 

Сейчас этот форум просматривают: Google [Bot] и гости: 1