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