[DELPHI] array-zugriff auf nicht-array

  • 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

  • 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.

  • 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.

    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

  • 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.

  • 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

  • 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

  • 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

Jetzt mitmachen!

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