Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   [Andorra] Kompilieren der DLL unter Delphi XE2 (https://www.delphipraxis.net/168880-%5Bandorra%5D-kompilieren-der-dll-unter-delphi-xe2.html)

yuishiro 15. Jun 2012 15:50

[Andorra] Kompilieren der DLL unter Delphi XE2
 
Hallo,
Ich benutze das OpenGL Plugin der Andorra2D Engine unter Delphi XE2 Professional.
Wie von Autor angeraten, habe ich das DLL-Projekt für meine Version neu kompiliert, da es zu Änderungen des internen Objektformats gekommen sein könnte.
Jedoch erhalte ich mit der selbst kompilierten DLL beim Aufruf der abstrakten Methode TAd2dRenderTargetTexture.SetSize, die in der DLL implementiert ist, eine Zugriffsverletzung auf die Adresse 0. Diese Methode wird unter anderem zum Erstellen von Objekten des Typs TAdSpritePixelCollisionTester oder TAdTextureSurface benötigt.
Die mitgelieferte, in Delphi Turbo Explorer 2006 kompilierte DLL funktioniert jedoch einwandfrei.

Sind besondere Compiler-Einstellungen von Nöten?
Oder gibt es eine andere Lösung für dieses Problem?

Viele Grüße,
Yuishiro

mkinzler 16. Jun 2012 13:27

AW: [Andorra] Kompilieren der DLL unter Delphi XE2
 
Ist das Objekt instantiiert?

yuishiro 16. Jun 2012 14:42

AW: [Andorra] Kompilieren der DLL unter Delphi XE2
 
SetSize wird hier aufgerufen:
Code:
procedure TAdRenderTargetTexture.UpdateSize;
begin
  if FAd2dTexture <> nil then
  begin
    Texture.SetSize(FWidth, FHeight, FBitDepth);
  end;
end;
Code:
function TAdRenderTargetTexture.GetTexture: TAd2dRenderTargetTexture;
begin
  result := TAd2dRenderTargetTexture(inherited Texture);
end;

//aus TAdCustomTexture:
property Texture: TAd2dTexture read FAd2DTexture write SetAd2DTexture;
Wobei der Rückgabewert von GetTexture <> nil ist, da TAdRenderTargetTexture von TAdCustomTexture abgeleitet ist und FAd2dTexture, auf das nun zugegriffen wird, vorher erstellt wurde, soweit ich das verstanden habe:
Code:
procedure TAdRenderTargetTexture.Initialize;
begin
  Finalize;

  FAd2dTexture := Parent.AdAppl.CreateRenderTargetTexture; //Diese Methode greift auch auf die DLL zu

  //Break here if the result was nil.
  if FAd2dTexture = nil then
    raise EAdInterfaceCreation(MsgSurfaceInterfaceNotAvailable);

  FAd2dTexture.Filter := FFilter;
  UpdateSize;
end;
Also sollte Texture vorher instanziert worden sein.

Viele Grüße,
Yuishiro

yuishiro 10. Okt 2012 17:28

AW: [Andorra] Kompilieren der DLL unter Delphi XE2
 
Lösung:

Aktuellen Header von DelphiGL.com verwenden.

(http://files.delphigl.com/new/dglOpenGL.zip)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 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