Einzelnen Beitrag anzeigen

SonnyBoyPro

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

AW: Direct2D / DirectWrite CreateGdiCompatibleTextLayout Implementation

  Alt 19. Jul 2015, 08:06
Hallo Sunec,

ich würde sagen der Header ist falsch übersetzt worden. Ich hab das bei meiner DX12 Lib so gemacht:

Delphi-Quellcode:
function CreateGdiCompatibleTextLayout(_string: PWideChar; stringLength: UINT32; textFormat: IDWriteTextFormat;
            layoutWidth: single; layoutHeight: single; pixelsPerDip: single; transform: PDWRITE_MATRIX; useGdiNatural: longbool;
            out textLayout: IDWriteTextLayout): HResult; stdcall;
Begründung: TextFormat ist ein Interface. In C++ ist ein Variable auf ein Interface ein Pointer. Delphi behandelt aber Interfaces aber per se als "Pointer".
Würde TextFormat eine Var sein müsste im C++ Header **textformat stehen. Detto bei string (wobei man jetzt bei mir noch diskutieren kann, ob vor dem _string nicht ein const schreiben kann).

Jetzt zur [in, optional] const DWRITE_MATRIX * transform,

in bedeutet das es eine Eingangsvariable ist. und zwar ein Pointer auf einen DWRITE_MATRIX Struktur. damit müsste man mit transform: PDWRITE_MATRIX übersetzen, weils ja ein Pointer ist.
Anmerkung: da aber die Aufrufkonvention stdcall ist werden hier const Deklarationen automatisch als call by referenz ausgeführt, könnte man auch übersetzen mit
const transform: TDWrite_Matrix. Ist bei meinen Headern auch nicht 100%, ist aber halt nur ne Sache des Aufrufes (@varDWriteMatrix oder varDWriteMatrix).

Textlayout ist okay, weil Interface (*) und Rückgabewert (*), also **.

Probier's mal so, sollte eigentlich so gehen.

bg

Norbert
  Mit Zitat antworten Zitat