Einzelnen Beitrag anzeigen

SonnyBoyPro

Registriert seit: 9. Mai 2007
68 Beiträge
 
#1

Bitpacked Record

  Alt 3. Sep 2014, 12:50
Hallo zusammen,

hat jemand Erfahrung mit bitpacked record unter FPC ?

Bin gerade am übersetzen der DWrite.h und dabei gibt es folgende Struktur:
Code:
struct DWRITE_LINE_BREAKPOINT
{
    UINT8 breakConditionBefore : 2;
    UINT8 breakConditionAfter  : 2;
    UINT8 isWhitespace         : 1;
    UINT8 isSoftHyphen         : 1;
    UINT8 padding              : 2;
};
Das zu übersetzen ist ja unter Delphi problematisch. J. S. Bladen hat das in seiner Translation so gelöst
Delphi-Quellcode:
TDWrite_LineBreakpoint=record
    LineBreakpointConditions:Byte;
  end;

Da ich mein Projekt mit FPC machen will, die Lib aber auch unter Delphi verwendbar sein soll, würde ich folgende Translation anstreben:
Delphi-Quellcode:
{$IFDEF FPC}
type
    Unsigned_Bit2 = 0 .. (1 shl 2) - 1;
{$ENDIF}

type
    TDWRITE_LINE_BREAKPOINT = {$IFDEF FPC} bitpacked {$ENDIF} record
    {$IFDEF FPC}
        case Integer of
        0:(
        breakConditionBefore: Unsigned_Bit2;
        breakConditionAfter: Unsigned_Bit2;
        isWhitespace: boolean;
        isSoftHyphen: boolean;
        padding: Unsigned_Bit2);
        1: (LineBreakpointConditions: UINT8);
    {$ELSE}
        LineBreakpointConditions: UINT8;
    {$ENDIF}
    end;
    DWRITE_LINE_BREAKPOINT = TDWRITE_LINE_BREAKPOINT;
    PDWRITE_LINE_BREAKPOINT = ^TDWRITE_LINE_BREAKPOINT;
Ist das so korrekt? Ich hab ein kleines Test-programm geschrieben, dort funktioniert das Setzen und Lesen der Bits, aber funktioniert das in Kombination mit der WinAPI/DirectDraw ? Hat da jemand Erfahrung?
bg
  Mit Zitat antworten Zitat