Avatar billede r9 Nybegynder
06. marts 2003 - 23:55 Der er 7 kommentarer og
1 løsning

Record?

Jeg kalder en metode som retunerer en record type som ser sådan ud:

    TEventRec = record
        case Integer of
            0: (Length: DWORD;
                Reserved: DWORD;
                RecordNumber: DWORD;
                TimeGenerated: DWORD;
                TimeWritten: DWORD;
                EventID: DWORD;
                EventType: WORD;
                NumStrings: WORD;
                EventCategory: WORD;
                ReservedFlags: WORD;
                ClosingRecordNumber: DWORD;
                StringOffset: DWORD;
                UserSidLength: DWORD;
                UserSidOffset: DWORD;
                DataLength: DWORD;
                DataOffset: DWORD);
            1: (VarData: array[0..65535] of Byte);
    //
    // Variable data may contain:
    //
    // WCHAR SourceName[]
    // WCHAR Computername[]
    // SID  UserSid
    // WCHAR Strings[]
    // BYTE  Data[]
    // CHAR  Pad[]
    // DWORD Length;
    //
    // Data is contained -after- the static data, the VarData field is set
    // to the beginning of the record merely to make the offsets match up.
    end;


Men jeg har problemmer med at læse fra "VarData" arrayet.

Hvordan gør jeg?
Avatar billede hermandsen Juniormester
07. marts 2003 - 00:58 #1
Det var godt nok noget af en record!!!
Hvilken funktion bruger du til at få den record, noget du selv har lavet?
Avatar billede r9 Nybegynder
07. marts 2003 - 08:57 #2
Nej, det er ikke noget jeg selv har lavet.
Det er noget open source kode.
Unit'en kan hentes her: http://www.stensaetningen.fri-web.dk/indy/StNTLog.pas

Når man kalder proceduren "ReadLog", så bliver der automatisk kaldt en event
nemlig "OnReadRecord"
Den ser sådan her ud:

property OnReadRecord : TStReadRecordEvent

TStReadRecordEvent = Procedure( Sender: TObject; const EventRec : TStEventLogRec; Var Abort : Boolean) of Object;


Nu kan man jo tilgå recorden med:
EventRec.Length;
osv.

Men hvordan trækker jeg data ud fra "VarData" arrayet?
Avatar billede hreiff Nybegynder
07. marts 2003 - 11:21 #3
Du burde da kunne addressere den direkte:

var
  x: TEventRec;
  tal: byte;

begin
  tal := x.VarData[23];
end;
Avatar billede hreiff Nybegynder
07. marts 2003 - 11:24 #4
PS. De første 56 bytes er 'optaget' af de andre værdier (.length, .reserved osv)
Avatar billede r9 Nybegynder
07. marts 2003 - 17:27 #5
hvordan får jeg VarData's indhold over i en TStringList'e?
Avatar billede hreiff Nybegynder
10. marts 2003 - 07:59 #6
Du må tage bytes'ne enkeltvis:

var
  s: string;
  i: integer;
  liste: TStringList;
begin
  i := 0;
  repeat
    s := '';
    Repeat
      s := s+chr(x.VarData[i])
      inc(i)
    Until ((x.VarData[i]=32) or (i=65535)); {mellemrum}
    Liste.add(s)
  Until i=65535; {slut}
end;
Avatar billede r9 Nybegynder
11. marts 2003 - 08:53 #7
kigger på det senere
Avatar billede r9 Nybegynder
18. marts 2003 - 15:06 #8
takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester