2009-03-27 16 views
6

Pracuję nad aplikacją WPF, w której część 3D jest obsługiwana przez DirectX 9 (dużo 3D, które nie działało wystarczająco szybko przy użyciu WPF).Aplikacja DirectX w oknach 64-bitowych

Problem polega na tym, że aplikacja jest wydana z opcją "Any CPU" jako konfiguracja i gdy użytkownik uruchamia ją w 64-bitowych oknach, część direcX ulega awarii (System.BadImageFormatException). Wygląda na to, że biblioteka DLL dołączona do części DirectX nie jest dostępna w 64-bitowych oknach.

Stało się tak z niektórymi innymi bibliotekami 3-składnikowymi, których używamy w naszej aplikacji, ale rozwiązaliśmy to przez zmianę bibliotek DLL w środowisku wykonawczym na te zbudowane dla x64, jeśli użytkownik pracuje na 64-bitowym komputerze z systemem Windows. Czy ktokolwiek wie, gdzie mogę znaleźć biblioteki DLL DirectX 9 dla x64? Jeśli w ogóle istnieją.

Te muszę to:

  • Microsoft.DirectX.Direct3D
  • Microsoft.DirectX.Direct3DX
  • Microsoft.DirectX

Jeśli one nie istnieją, może problem być rozwiązany w jakiś inny sposób? Nie mogę zmienić konfigurację do x86, ponieważ aplikacja jest uwalniany poprzez ClickOnce i zmiana konfiguracji sprawiają ClickOnce przestać działać (konfiguracja jest zawarte w kluczu ClickOnce)


Dodam, że używam WinForms część obsługiwana przez aplikację WPF i że część z winForm używa bibliotek DLL DirectX, o które pytam. Był to znacznie lepszy i szybszy sposób prezentacji wielu siatek 3D w WPF niż użycie WPF: s 3D. Niestety wystąpił ten problem.

+0

Tak na marginesie: Itself XNA/Windows siły użyć trybu 32-bitowego nawet na x64 - więc zastanawiam się, czy to po prostu nie jest możliwe ... I naprawdę nie wiem, choć. –

+0

Po prostu FYI, WPF 3d stuff jest opakowaniem dla bezpośredniego X. Są prawie jednym w tym samym. Daj lub weź trochę rzeczy. – Tony

Odpowiedz

5

Potrzebne biblioteki DLL są dla zarządzanego DirectX. Niestety Microsoft nie obsługuje już Managed DirectX i jego następcy, XNA również nie obsługuje 64bit.

SlimDX to otwarta alternatywa dla Managed DirectX i obsługuje standard 64-bitowy. Inną opcją jest napisanie kodu DirectX w niezarządzanym C++.

+0

Dzięki za odpowiedź. Więc zasadniczo muszę ponownie zaprogramować całą część 3D, jeśli chcę, aby była w stanie działać na x64. Ta dowolna konfiguracja CPU jest do dupy ... –

+1

Dobrze, że wsparcie Microsoftu dla direct x w zarządzanym środowisku jest do bani, ale tak. Biorąc pod uwagę popychanie z interakcjami DirectX/WPF mam nadzieję, że zobaczę lepsze wsparcie w przyszłości. –

+0

Inna opcja http://forums.create.msdn.com/forums/t/90094.aspx miksowanie z Xna. –

0

Możesz ustawić swoją aplikację WPF tak, aby działała tylko jako aplikacja 32-bitowa. Opublikuj swój problem ClickOnce jako kolejne pytanie SO. To prawdopodobnie najlepsza opcja.

Project Properties -> Build -> Platform Target -> x86