AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey / d2d1.dll

Ein Thema von peenuzz · begonnen am 6. Mär 2013 · letzter Beitrag vom 6. Mär 2013
Antwort Antwort
peenuzz

Registriert seit: 13. Dez 2011
7 Beiträge
 
#1

Firemonkey / d2d1.dll

  Alt 6. Mär 2013, 07:25
Guten Morgen DPler,

in meiner Anwendung (Firemonkey/XE2) ist gestern ein Problem aufgetreten, das anscheinend im direkten Zusammenhang mit der d2d1.dll steht.
Dabei geht es darum, dass ich eine beliebige Exe Datei aus dem Programm heraus öffne, welche zum Start Adminrechte benötigt. Dazu benutze ich wahlweise Shellexecute mit runas oder die bekannte runAsAdmin Funktion. Das Ergebnis ist bei beiden gleich.
Jetzt wird die UAC aufgerufen, die zu startende Exe wird gestartet (und läuft einwandfrei) und kurz darauf knallt es. Der Compiler meldet mir quasi unendlich oft hintereinander eine Exception in der d2d1.dll.
Daraufhin habe ich nach langer Durchsicht meines Codes beschlossen, mal ein neues Projekt anzulegen (auch Firemonkey, da nur hier der Fehler auftritt) und nur einen Button draufzupacken, der mir bei Klick das runas ausführen soll. Das macht die Anwendung auch. Jedoch trat hier der Fehler auf, dass der Button nach der UAC Abfrage bei onMouseOver (keine Funktionalität) falsch gezeichnet wird. Er bekommt ja in der Regel eine andere Farbe bei mouseover, nach dem runas wird er fast unsichtbar.
Ich denke mir, ok Firemonkey halt und teste beide Projekte auf einem anderen Rechner. Dort tritt weder die d2d1.dll exception noch der komische BUtton-Bug auf. Das gleiche an einem 3. Rechner. Am 4. tritt der Fehler wieder auf. Es spielt auch keine Rolle, an welchem Rechner kompiliert wurde.
Es stellt sich heraus, dass die Recher, an denen der Fehler auftritt, eine d2d1.dll vom 13.01.2013 haben. Die DLL der Rechner, auf denen alles prima funktioniert, ist von 2012 bzw 2011. (Es geht übrigens um Win7, auf anderen Platformen habe ich noch nicht getestet)

Sind derartige Probleme bekannt?
Ich bin auch für Informationen darüber dankber, was die DLL überhaupt macht, hier war google nicht sehr aussagekräftig.

Danke euch !
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Firemonkey / d2d1.dll

  Alt 6. Mär 2013, 07:57
Hast du das schon an http://qc.embarcadero.com/wc/qcmain.aspx gemeldet?

Wenn du es definitiv an die DLL-Version hängen kannst so vermute ich mal das hier MS ein für FM inkompatible API-Änderung durchgeführt hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
peenuzz

Registriert seit: 13. Dez 2011
7 Beiträge
 
#3

AW: Firemonkey / d2d1.dll

  Alt 6. Mär 2013, 08:08
Nein habe ich noch nicht gemeldet.
Ich habe das ganze mal von einem Kollegen mit XE3 kompilieren lassen. Dabei trat der Fehler nicht auf. Jetzt installiere ich bei mir mal XE3. Wenn das dann auch funktioniert, werde ich den Bug melden.
Danke für den Rat.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Firemonkey / d2d1.dll

  Alt 6. Mär 2013, 08:56
Ich habe das ganze mal von einem Kollegen mit XE3 kompilieren lassen. Dabei trat der Fehler nicht auf. Jetzt installiere ich bei mir mal XE3. Wenn das dann auch funktioniert, werde ich den Bug melden.
Wenn der Fehler mit XE3 nicht mehr auftritt brauchst du nix mehr melden. Fehler ist behoben und die Wahrscheinlichkeit das noch ein Update für XE2 kommt welches das dann für XE2 behebt ist nahe 0.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
TiGü

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

AW: Firemonkey / d2d1.dll

  Alt 6. Mär 2013, 09:04
Ich habe das ganze mal von einem Kollegen mit XE3 kompilieren lassen. Dabei trat der Fehler nicht auf. Jetzt installiere ich bei mir mal XE3. Wenn das dann auch funktioniert, werde ich den Bug melden.
Firemonkey benutzt zum Selberzeichnen die Grafikschnittstelle des Betriebsystems.
Unter Windows ist dies DirectX (Direct2D und Direct3D).
Die D2D1.dll enthält alle Definitionen, Interfaces und Funktionen für Direct2D.

Wenn die UAC hochploppt, werden DirectX-Ressourcen angehalten und/oder freigegeben bzw. Handles gehen verloren.

Wenn das XE3 eine Vollversion und keine Trial ist, dann kannst du ja mal einen Vergleich der Winapi.D2D1.pas zwischen XE2 und XE3 durchführen.
Das ist der Delphi-Header für die D2D1.dll
Zu finden in %ProgramFiles%\Embarcadero\RAD Studio\10.0 bzw. 9.0\source\rtl\win

Wenn Microsoft zwischen 2011 und 2013 per Windows Update die DLL erneuert hat, kann es Änderungen an der Außenschnittstelle geben haben.
Durch den Vergleich kannst du sehen, ob Embarcadero dies in XE3 berücktsichtigt hat.
Wenn ja, kannst du ggf. die Unit austauschen.

Geändert von TiGü ( 6. Mär 2013 um 09:26 Uhr)
  Mit Zitat antworten Zitat
peenuzz

Registriert seit: 13. Dez 2011
7 Beiträge
 
#6

AW: Firemonkey / d2d1.dll

  Alt 6. Mär 2013, 09:28
Wenn das XE3 eine Vollversion und keine Trial ist, dann kannst du ja mal einen Vergleich der Winapi.D2D1.pas zwischen XE2 und XE3 durchführen.
Das ist der Delphi-Header für die D2D1.dll
Zu finden in %ProgramFiles%\Embarcadero\RAD Studio\10.0 bzw. 9.0\source\rtl\win
Danke für die Info. XE3 ist Vollversion und die Test-exe läuft ohne den Bug.
Mein Compare Tool zeigt mir nur einen zu vernachlässigenden Unterschied zwischen beiden Dateien. Auch nachdem ich die alte d2d1.pas mit der neuen überschrieben hatte, trat der Fehler noch auf.
  Mit Zitat antworten Zitat
TiGü

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

AW: Firemonkey / d2d1.dll

  Alt 6. Mär 2013, 09:56
Möglicherweise ist die wesentliche Änderung zum Beispiel in FMX.Canvas.D2D.
Auch deren Includes wären eine genauere Untersuchung wert (Winapi.DxgiFormat, Winapi.DxgiType, Winapi.DXGI, Winapi.D2D1, Winapi.D3D10, FMX.Types, FMX.Platform.Win, FMX.Types3D, FMX.Text, FMX.PixelFormats, FMX.Context.DX10...).

Ich meine gelesen zu haben, das Firemonkey 2.0 in XE3 per default auf DirectX 10 aufsetzt.
http://blogs.embarcadero.com/ekryuko...firemonkey-20/

Vorher war es anscheinend DirectX 9 basierend.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:00 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