Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DX10 / proxydll Problem (https://www.delphipraxis.net/150155-dx10-proxydll-problem.html)

GOOFY009 8. Apr 2010 23:54


DX10 / proxydll Problem
 
Hi !
Nach dem ich (auch unter Mithilfe hier aus dem Board) erfolgreich eine DX9-Proxydll geschrieben habe, wollte ich mich nun an DX10 machen.
Bisher funktioniert auch alles tadellos.... bis zu einem gewissen Punkt.

Aber der Reihe nach:

1. Ich fange den Aufruf "CreateDevice" an die d3d10.dll ab und gebe meine eigene Klasse von ID3D10Device weiter.
2. Es wird ein QueryInterface von IDXGIDevice gefordert welches auch durch eine eigene Klasse ersetz wurde.
3. Es werden diverse weiter, mir unbekannte, TGUID angefordert die allerdings von der original DLL ebenfalls mit
NIL beantwortet werden und somit offenbar keinen Einfluß auf den weiteren Verlauf haben.
4. Von der IDXGIDevice-Klasse wird per "GetParent" ein IDXGIAdapter angefordert. Auch dies wird durch eine eigene
Klasse ersezt und funktioniert.
5. Von der IDXGIAdapter-Klasse wird auch per "GetParent" ein IDXGIFactory angefordert (ganz wichtig, da hiermit die
SwapChain angelegt wird!) und hier passiert es. Die eigene Klasse wird, wieso auch immer, nicht als Rückgabe
akzeptiert?!
Delphi-Quellcode:
 
function myIDXGIAdapter.GetParent(const IID: TGUID;out pParent): HResult; stdcall;
var
  hr              : HRESULT;
  pmyIDXGIFactory : IDXGIFactory;
  ppmyIDXGIFactory : IDXGIFactory;
begin
  if (GUIDToString(IID) = IDXGIFactoryStr) then begin
    hr := m_pIDXGIAdapter.GetParent(IID,pmyIDXGIFactory);
    ppmyIDXGIFactory := myIDXGIFactory.create(pmyIDXGIFactory);
    Pointer(pParent) := Pointer(ppmyIDXGIFactory);
    ///////////////////////////////////////////////////////
    // Diese Rüchgabe ohne die Klasse funktioniert !!! ////
    // Pointer(pParent) := Pointer(pmyIDXGIFactory); //////
    ///////////////////////////////////////////////////////

    result := hr;
  end else begin
    result := m_pIDXGIAdapter.GetParent(IID,pParent);
  end;
end;
Wie im Quelltext zu sehen bzw. vermerkt funktioniert es nur wenn ich die Variable von der originalen DLL
zurück gebe.

Hat jemand eine Lösung dafür bzw. sich schon mal mit diesem "Problem" auseinander gesetzt?
Bin für jede Hilfe, jeden Tip dankbar.

CU GOOFY


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz