Autor Beitrag
butzki
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 07.09.08 13:38 
Hallo.

Ich bin noch ziemlich neu beim Programmieren dabei (knapp ein Jahr), jedoch macht es mir sehr viel Spaß.

Nun habe ich jedoch ein Problem. Ich habe mit Visual Studio 2008 und .net 3.5 ein 2D Spiel programmiert und es mittels dem SetupWizard Projekt "veröffentlicht". Installiere ich es auf meinem PC, funktioniert es wunderbar.

Nun habe ich es auf einem anderen Rechner installieren wollen, aber ich bekomme es einfach nicht zum Laufen. Nachdem ich es installiert habe und es starten wollte, hat es gesagt, es würde .net 3.5 benötigt. OK, also habe ich es runter geladen und auf dem PC installiert. Nun gibt es beim Start eine Fehlermeldung, dass eine FileNotFound exception aufgetreten ist.

Ich fand ziemlich schnell heraus, dass es sich hierbei um eine bestimmte Version der Microsoft.DirectX.Direct3DX.dll handelte, obwohl DirectX 9.0c auch auf dem Rechner installiert war. Also habe ich die DirectX dlls, auf die mein Programm verweist ebenfalls in das Setup mit aufgenommen und bei der Installation ins GAC schieben lassen.

Doch ich kann das Spiel immer noch nicht starten. Ich habe alle Ressources (als ApplicationStartupPath + Ordnername hardcodiert) dabei, aber trotzdem kommt nach wie vor eine Exception. Kann es sein, dass auf dem PC bestimmte .net Bibliotheken fehlen?

Ich bin am verzweifeln. :/

Ich habe jetzt versucht, auf einer VM mit Vista zu installieren und dort hat er nach dem Install automatisch das .net 3.5 heruntergeladen. Beim Start kommt dann die Meldung, dass das programm gestoppt wurde.

Hat jemand evtl. einen Rat für mich, was ich falsch mache bzw. was ich anders machen kann?

Gruß,

Butzki
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 07.09.08 14:26 
:welcome:

user profile iconbutzki hat folgendes geschrieben:
Ich habe alle Ressources (als ApplicationStartupPath + Ordnername hardcodiert) dabei, aber trotzdem kommt nach wie vor eine Exception.
Die da wäre?
Jedenfalls darfst du die Managed-DX-Dlls eigentlich nicht mit deinem Programm ausliefern. Die sollten installiert werden, wenn man den Installer nach der .Net-Installation ausführt.

_________________
>λ=
butzki Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 09.09.08 18:09 
Huhu.

Sorry für die späte Antwort, aber ich hatte gestern keine Zeit, die genaue Fehlermeldung zu dokumentieren.

Also erstmal zu den Ressources - das sind BMPs und WAVs, die in dem Spiel verwendet werden. Ich habe nun auch versucht, das Programm "neu" auf dem Rechner zu schreiben, wo das Problem aufgetreten ist und konnte somit einen Screenshot von der Fehlermeldung machen, die dabei aufgetreten ist. Sie lautet:

"Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E)"

Sie tritt dann auf, wenn ich die Methode "InitializeGraphics();" aufrufen möchte.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
static void Initialize()
        {
            m_GameWindow = new GameWindow();
            m_GameWindow.ClientSize = m_Resolution;

            [b]InitializeGraphics();[/b]
            InitializeInput();
            InitializeSound();

            m_GameWindow.Show();
        }

        static void InitializeGraphics()
        {
            PresentParameters presentParams = new PresentParameters();
            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;
            presentParams.PresentationInterval = PresentInterval.One;

            dGDevice = new DGDevice(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, m_GameWindow, CreateFlags.SoftwareVertexProcessing, presentParams);

            dGDevice.RenderState.ReferenceAlpha = 0;
            dGDevice.RenderState.AlphaFunction = Compare.NotEqual;

            [b]DXSprite = new D3DSprite(Game.Device);[/b]
        }


Was mir dabei überhaupt nicht einleuchtet ist, dass er nicht einmal in die Methode springt. Kommentiere ich nun jedoch die Zeile:

DXSprite = new D3DSprite(Game.Device);

in der aufzurufenden Methode auf, springt er in die Methode und gibt erst später wieder eine Fehlermeldung, vermutlich, wenn er die DXDprite verwenden möchte.

Ich weiß nicht, woran es liegen kann. Ist es eher ein .net, ein DirectX oder ganz ein anderes Problem?

Gruß,

Butzki

Moderiert von user profile iconKha: Highlight- durch C#-Tags ersetzt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 09.09.08 20:58 
Wahrscheinlich wird eine unmanaged DX-Dll nicht gefunden. Versuche es also einmal mit dem DX-Update.

_________________
>λ=
butzki Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 10.09.08 20:06 
Hallo.

Ja, das war es auch. Ich habe heute, bevor ich die Antwort gelesen habe, das DX Pack auf dem Rechner installiert und siehe da, nun funktioniert es.

Ich hätte mich also nicht auf die dxdiag Aussage verlassen sollen, dass DX9.0c installiert ist. ;)

Vielen Dank trotzdem!!!

Gruß,

Butzki :)