AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Direct2D 1.1 CreateDeviceContext
Thema durchsuchen
Ansicht
Themen-Optionen

Direct2D 1.1 CreateDeviceContext

Ein Thema von SonnyBoyPro · begonnen am 31. Jan 2014 · letzter Beitrag vom 4. Feb 2014
 
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Direct2D 1.1 CreateDeviceContext

  Alt 3. Feb 2014, 10:11
Wie ich vermutet hatte, du hast die Reihenfolge der Interface-Methoden vertauscht.

Oder besser gesagt, du hast das für bare Münze genommen, was in der MSDN steht.
Hier musst du Vorsicht walten lassen, weil in der MSDN die Methoden idR. alphabetisch sortiert sind.
Das muss aber in den Orginaldefinition nicht sein!
Dadurch kommt die virtual method table (VMT) durcheinander.
Siehe auch hier!

Du musst dich beim Übersetzen immer an die Microsoft-Header direkt halten.

Dadurch, dass ClearResources vor CreateDeviceContext definiert wurde, hat sich alles verschoben und das Device hat die CreatePrintControl-Methode verwendet, obwohl du CreateDeviceContext gerufen hast.

Richtig(er) wäre also:

Delphi-Quellcode:
    IPrintDocumentPackageTarget = interface(IUnknown)

    end;

    ID2D1Device = interface(ID2D1Resource)
    ['{47dd575d-ac05-4cdd-8049-9b02cd16f44c}']
      function CreateDeviceContext(const options: TD2D1_DEVICE_CONTEXT_OPTIONS; out deviceContext: ID2D1DeviceContext): HResult; stdcall;
      function CreatePrintControl(wicFactory: IWICImagingFactory;
        documentTarget: IPrintDocumentPackageTarget;
        printControlProperties: TD2D1_PRINT_CONTROL_PROPERTIES;
        out printControl: ID2D1PrintControl): HResult; stdcall; // ToDo needs DocumentTarget.h --> Jedi ?!?
      function SetMaximumTextureMemory(maximumInBytes: UINT64): HResult; stdcall;
      function GetMaximumTextureMemory: UINT64; stdcall;
      function ClearResources(millisecondsSinceUse: UINT32 = 0): HResult; stdcall;
    end;
Das gleiche Problem hast du dann weiter unten im auskommentierten Code für m_d2dContext.CreateBitmapFromDxgiSurface.
Auch die Defintion von ID2D1DeviceContext ist ein bisschen durcheinander geraten.

Irgendwie sind auch die von dir verwendeten Header nicht ganz korrekt.
Bspw. musst du für SetTarget das ID2D1Bitmap1 noch umcasten nach ID2D1Image.
Eigentlich ist das aber nicht nötig!

Das liegt an der falschen Vererbungslinie in D2D1.pas von diesen J S Bladen.
Korrekt wäre ist ID2D1Bitmap1 -> ID2D1Bitmap -> ID2D1Image -> ID2D1Resource -> IUnknown.
In dieser Übersetzung ist aber Bitmap direkt von Resource abgeleitet.

Geändert von TiGü ( 3. Feb 2014 um 12:09 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz