Ich verwende XNA in einer WPF-Anwendung um auf einen angeschlossenen Controller zuzugreifen. Im WPF Designer wird Code ausgeführt, der die Funktion
Das Problem ist: Wenn der Code im Designer ausgeführt wird, dann wird die DLL in so einen temorären Ordner kopiert:
Dekompiliert man die Dll sieht man, dass alle Methoden "geleert" wurden:
Das könnte daran liegen, dass als Verweis
Diese Methoden sind aber ungültiger Code. Methoden, die was zurückgeben, müssen vor dem ret-OpCode das zurückzugebende Objekt auf dem Auswertumgsstapel liegen lassen. Das ist hier nirgends der Fall. Deshalb meckert der JIT-Compiler beim Ausführen:
Das Problem ist jetzt folgendes:
Ich müsste vor jeder Verwendung von irgendwas aus der XNA-DLL abfragen, ob der Code aktuell im Designer ausgeführt wird und wenn nötig den Teil überspringen. Und das passiert an einigen Stellen. Ich möchte nicht vor jeden Zugriff eine Abfrage hinklatschen müssen.
Wie kann ich entweder den Designer dazu bringen, die richtige DLL zu verwenden oder alternativ das Problem anders umgehen?
Microsoft.Xna.Framework.Input.Gamepad.GetState
aufruft.Das Problem ist: Wenn der Code im Designer ausgeführt wird, dann wird die DLL in so einen temorären Ordner kopiert:
C:\Users\Niko\AppData\Local\assembly\dl3\OY0GRB8E.WKH\91AET2PZ.112\110ffcf5\008430ff_b541d001\Microsoft.Xna.Framework.dll
Dekompiliert man die Dll sieht man, dass alle Methoden "geleert" wurden:
CIL-Quellcode
- .class public auto ansi abstract sealed Microsoft.Xna.Framework.Input.GamePad
- extends [mscorlib]System.Object
- {
- .method public hidebysig static valuetype Microsoft.Xna.Framework.Input.GamePadState GetState(valuetype Microsoft.Xna.Framework.PlayerIndex playerIndex) cil managed
- {
- .maxstack 8
- IL_0000: ret
- }
- .method public hidebysig static valuetype Microsoft.Xna.Framework.Input.GamePadState GetState(valuetype Microsoft.Xna.Framework.PlayerIndex playerIndex, valuetype Microsoft.Xna.Framework.Input.GamePadDeadZone deadZoneMode) cil managed
- {
- .maxstack 8
- IL_0000: ret
- }
- .method public hidebysig static valuetype Microsoft.Xna.Framework.Input.GamePadCapabilities GetCapabilities(valuetype Microsoft.Xna.Framework.PlayerIndex playerIndex) cil managed
- {
- .maxstack 8
- IL_0000: ret
- }
- .method public hidebysig static bool SetVibration(valuetype Microsoft.Xna.Framework.PlayerIndex playerIndex, float32 leftMotor, float32 rightMotor) cil managed
- {
- .maxstack 8
- IL_0000: ret
- }
- }
Das könnte daran liegen, dass als Verweis
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.1\Microsoft.Xna.Framework.dll
angegeben ist und soweit ich das sehe sind alle DLLs C:\Program Files (x86)\Reference Assemblies\
nach dem Schema "geleert".Diese Methoden sind aber ungültiger Code. Methoden, die was zurückgeben, müssen vor dem ret-OpCode das zurückzugebende Objekt auf dem Auswertumgsstapel liegen lassen. Das ist hier nirgends der Fall. Deshalb meckert der JIT-Compiler beim Ausführen:
Das Problem ist jetzt folgendes:
Ich müsste vor jeder Verwendung von irgendwas aus der XNA-DLL abfragen, ob der Code aktuell im Designer ausgeführt wird und wenn nötig den Teil überspringen. Und das passiert an einigen Stellen. Ich möchte nicht vor jeden Zugriff eine Abfrage hinklatschen müssen.
Wie kann ich entweder den Designer dazu bringen, die richtige DLL zu verwenden oder alternativ das Problem anders umgehen?
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils