1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[DELPHI] array-zugriff auf nicht-array

    • Frage
  • michi204
  • 3. Juli 2006 um 11:16
  • Unerledigt
  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 3. Juli 2006 um 11:16
    • #1

    hallo!

    ich arbeite an einem projekt in delphi + win32 und verstehe praktischerweise nicht viel von delphi :)

    in c++ kann ich, wenn mir ein system call einen pointer zurückgibt, diesen wie ein array verwenden, also pointer[0], pointer[1], etc. sagen. in delphi habe ich nun ein problem: wie kann ich auf meinen pointer indiziert zugreifen, ohne allzuviel extra aufwand zu betreiben?

    Code
    var
     pdacl : PACL;
     count  : integer;
     list : PEXPLICIT_ACCESS_A;
    
    
    [...]
    
    
    GetExplicitEntriesFromACL(pdacl^, count, list).

    wobei pdacl und count als referenz übergeben werden, list nicht. und genau auf list müsste ich später so zugreifen:

    Code
    [...] := list[i].trustee
    [...]

    wäre dankbar für tipps, vl kennt sich ja jemand mit delphi gut aus?

    lg,
    michi

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 3. Juli 2006 um 12:09
    • #2

    Hm, du könntest nen eigenen type deklarieren, à la

    "TGoilesArray = array of pups"
    "PGoilesArray = ^TGoilesArray"

    Dann kannst es vielleicht umcasten, und indiziert drauf zugreifen, verlassen würd ich mich nicht drauf, ich wills jetzt nicht ausprobiern.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 6. Juli 2006 um 10:25
    • #3

    danke für den tipp, delphi nimmt das zwar, irgendwas funktioniert aber nicht. ich ärger mich jetzt schon seit tagen damit herum. ich habe auch ähnliche ansätze probiert, leider bringt das auch nichts. ich lande irgendwie immer an der falschen stelle im speicher, nicht dort, wo die api-funktion die daten abgelegt hat.

    Code
    type
            TEA = array of EXPLICIT_ACCESS_W;
            PEA = ^TEA;
    [...]
    var
            list : PEA;
            pdacl : PACL;
            psd : PSECURITY_DESCRIPTOR;
    [...]
            ret := GetExplicitEntriesFromACL(pdacl^, count, @ea) ;
            [COLOR=DarkRed]list := @ea;[/COLOR]
    Alles anzeigen

    ich verstehe auch nicht, warum @(list^[0]) nicht gleich ea ist..
    hoffentlich ist es nicht irgendwas einfaches, denn dann beiß ich in meine tastatur.

    wenn man dann wenigstens hässliche pointer-arithmetik betreiben könnte, à la pointer += 32. ich werds dann mal mit plain-pointers und inc versuchen, das schaut vielversprechend aus. notfalls bleibt ja noch assembler-code, aber das kann es doch nicht sein.

    lg,
    michi

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 6. Juli 2006 um 10:39
    • #4

    Hässliche Pointer Arithmetik kannst du machen, allerdings wird das noch hässlicher als in C.

    Pointer(Integer(meinPointer) + 32)

    bzw. statt Pointer halt den typisierten.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • zwutschkerl
    6
    zwutschkerl
    Mitglied
    Punkte
    365
    Beiträge
    71
    • 6. Juli 2006 um 13:21
    • #5
    Zitat von michi204
    Code
    var
     pdacl : PACL;
     count  : integer;
     list : PEXPLICIT_ACCESS_A;
    
    
    [...]
    
    
    GetExplicitEntriesFromACL(pdacl^, count, list).


    wobei pdacl und count als referenz übergeben werden, list nicht. und genau auf list müsste ich später so zugreifen:

    Code
    [...] := list[i].trustee
    [...]


    wäre dankbar für tipps, vl kennt sich ja jemand mit delphi gut aus?

    lg,
    michi

    ich verteh nicht ganz was Du willst, was fuer ein Typ ist PEXPLICIT_ACCESS_A denn ueberhaupt?

    und im anderen code segment, wie ist ea deklariert?

    lg,
    Toni

  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 6. Juli 2006 um 18:56
    • #6

    hallo leute!

    danke für eure hilfe. das problem hängt möglicherweise damit zusammen, dass die api-records in meiner delphi-distribution 'packed' deklariert sind, wodurch sie im speicher kleiner als die c++-structs sind, wovon natürlich der aufgerufene system call nichts weiß. ich habe nun für die pointerarithmetik jeweils zwei mov und ein add verwendet :) und die offsets aus dem speicherauszug meiner c++-referenzimplementierung genommen, und damit funktioniert es nach einiger spielerei tatsächlich, was zunächst einmal die hauptsache ist.

    lg,
    michi

  • michi204
    26
    michi204
    Mitglied
    Reaktionen
    63
    Punkte
    7.268
    Beiträge
    1.318
    • 8. Juli 2006 um 14:34
    • #7

    ok, die wirkliche ursache ist folgende: meine datenstruktur enthält einen enumerationstypen. in c++ sind enumerationen 4 byte groß, in delphi nur 1 byte wenn nicht mehr nötig. :hewa:

    lg,
    michi

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung