# DirectX mit Visual C++ 2010



## afg_style (23. April 2011)

Hallo Leute,

weiß jemand von euch wie ich den folgenden Fehler in Visual Studion 2010 beheben kann?

Mein Programm:

```
#include <windows.h>    // include the basic windows header file

// the entry point for any Windows program
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nShowCmd)
{
    // create a "Hello World" message box using MessageBox()
    MessageBox(NULL,
               L"Hello World!",
               L"Just another Hello World program!",
               MB_ICONEXCLAMATION | MB_OK);

    // return 0 to Windows
    return 0;
}
```

Beim debuggen kommt der Fehler:
1>------ Build started: Project: DirectX, Configuration: Debug Win32 ------
1>LINK : fatal error LNK1104: cannot open file 'C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib.obj'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Danke


----------



## Matthias Reitinger (23. April 2011)

Hallo,

du hast bei den Linker-Einstellungen was falsch gemacht. Zeig uns bitte mal dein Projekt (als Anhang).

Grüße,
Matthias


----------



## afg_style (23. April 2011)

Hier ist mein projekt

THX


----------



## Matthias Reitinger (24. April 2011)

Das Projekt scheint mir an sich in Ordnung zu sein. Zumindest lässt es sich hier ohne Probleme bauen. Der Aufruf des Linkers im Buildlog erscheint mir seltsam. Kannst du denn andere Projekte mit deiner VS2010-Installation kompilieren (z.B. ein einfaches Konsolenprojekt)?

Grüße,
Matthias


----------



## afg_style (24. April 2011)

Die Konsolenanwendungen lassen sich schon compelieren, aber nach dem compelieren wird die Konsole nur kurz angezeigt und dann schließt sie sich wieder. Egal ob ich jetzt "Start Debugging" oder "Start Without Debugging" ausführe. 

 .....google kann mir da auch nicht helfen!!

Beim erstellen eines Win32 Anwendungs kann ich auswählen ob, ich ein Empty project haben will oder nicht. 
Wenn ich kein Empty project  nehme kommt genau dieselbe Fehlermeldung.


----------



## Muepe32 (24. April 2011)

afg_style hat gesagt.:


> Die Konsolenanwendungen lassen sich schon compelieren, aber nach dem compelieren wird die Konsole nur kurz angezeigt und dann schließt sie sich wieder. Egal ob ich jetzt "Start Debugging" oder "Start Without Debugging" ausführe.



Das ist auch normal so. Warum sollte die Konsole weiter offen bleiben, wenn das Programm fertig ist? 

Du kannst einfach ein leeres Projekt als "Vorlage" auswählen und dann da deinen Code einfügen. Die Templates finde ich nicht wirklich gut, die Visual Studio da im C++-Bereich anbietet. Ich starte eigentlich auch immer mit einem leeren Projekt und schraube dann bisschen an den Compiler- und Linkereinstellungen rum damit das drin ist, was für mich passt.


----------



## afg_style (24. April 2011)

Darum geht es mir hier ja auch nicht!

Ich will einfach nur ein DirectX project erstellen, dass sich fehlerfrei compilieren lässt. 
Und dazu muss ich die Compiler-Einstellungen ändern, vermute ich mal.

Siehe Fehlermeldung oben.


----------



## Muepe32 (24. April 2011)

Nein, du musst einfach ein leeres Projekt erstellen, die entsprechenden Header einbinden und die nötigen Libraries linken (d3d9.lib/d3d10.lib/d3d11.lib und (falls nötig) die Hilfsbibliothek d3dx9.lib/d3dx10.ib/d3dx11.lib). Das kannst du entweder in den Linkereinstellungen machen oder via #pragma comment(lib, "libName.lib")


----------



## afg_style (24. April 2011)

Funktioniert trotzdem nicht. Die Fehlermeldung bleibt gleich.


----------



## Muepe32 (24. April 2011)

Kann ich leider nicht bestätigen, dein Projekt funktioniert ohne das kleinste Problem. Es gibt auch überhaupt keinen Grund, warum der Linker bei dem von dir geposteten Projekt die erwähnte Fehlermeldung bringen sollte, du hast weder irgendwas von DirectX verwendet noch irgendeinen der Pfade des SDKs angegeben. Der Linker kennt in dem von dir geposteten Projekt den Pfad, den in der Fehlermeldung angibt gar nicht. Da auch dein Buildlog in der Kommandozeile Dinge enthält, die in den Projekteinstellungen des von dir geposteten Projekts nicht vorhanden sind vermute ich, dass du das Projekt nicht so gepostet hast, wie du es bei dir verwendest.


----------



## afg_style (24. April 2011)

Hilft es vielleicht was, wenn ich Visual Studio neu installiere?


----------



## Muepe32 (24. April 2011)

Ist nicht anzunehmen, das Problem ist nicht beim Compiler/Linker, du machst etwas falsch. Es hilft sicher, wenn du das Projekt mal genau so uploadest, wie es nach dem fehlerhaften Build war (ohne irgendwas zu ändern oder löschen), damit man wirklich genau sieht, was du gemacht hast. Denn wie gesagt, wenn du weder den SDK-Pfad angibst noch irgendwas daraus verwendest kommt darin auch keine Fehlermeldung.


----------



## afg_style (24. April 2011)

Ich habe auch vor dem letzten upload nichts geändert gehabt!


----------



## Matthias Reitinger (24. April 2011)

Du könntest mal probieren, die Einstellungen von Visual Studio 2010 zurückzusetzen. Offensichtlich liegt das Problem ja nicht am Projekt, sondern an deiner VS-Installation.

Zum Thema „Leeres Projekt“: Der Projekttyp „Leeres Projekt“ ist nur eingeschränkt zu empfehlen. Besser ist es, ein „Win32-Projekt“ zu erstellen und im Assistenten dann „Leeres Projekt“ auszuwählen. So werden z.B. die Präprozessor-Definitionen WIN32 und NDEBUG (Release) bzw. _DEBUG (Debug) gesetzt. Fehlen diese Definitionen, kann es schon mal zu Problemen mit externen Bibliotheken kommen.

Grüße,
Matthias


----------



## Muepe32 (24. April 2011)

Es muss auf jeden Fall so sein, dass du irgendwelche Einstellungen by default überschreibst. So hat deine Kommandozeile zum Beispiel den folgenden Teil drin:


> "C:\Program Files (x86)\Microsoft DirectX SDK (November 2007)\\"



Da dieser Pfad aber nicht im Projekt gesetzt wurde musst du ihn sonst wo eingetragen haben. Die Einstellungen komplett zurückzusetzen ist wohl mal eine gute Idee.


----------



## afg_style (24. April 2011)

Ich habe jetzt die Einstellungen zurückgesetzt und dann kommt die Fehlermeldung:

1>------ Build started: Project: DirectX, Configuration: Debug Win32 ------
1>Build started 24.04.2011 16:11:33.
1>InitializeBuildStatus:
1>  Touching "Debug\DirectX.unsuccessfulbuild".
1>ClCompile:
1>  All outputs are up-to-date.
1>ManifestResourceCompile:
1>  All outputs are up-to-date.
1>LINK : fatal error LNK1104: cannot open file 'C:\Program Files (x86)\Microsoft DirectX SDK (November 2007)\\.obj'
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.10
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Ich weiß immer noch nicht was hier los ist.


----------



## Muepe32 (24. April 2011)

Also folgendes: Du machst ein neues leeres Win32-Projekt. Erscheint der Fehler dann?


----------



## afg_style (24. April 2011)

Ja, es ist dieselbe Fehlermeldung.


----------



## Muepe32 (24. April 2011)

Und was passiert, wenn du ein neues leeres Konsolenprojekt machst, funktioniert es dann?


----------



## afg_style (24. April 2011)

Jop, das funktioniert einwandfrei.


----------



## Muepe32 (24. April 2011)

Dann ist das Problem zumindest temporär gelöst. Du  machst einfach ein Konsolenprojekt und nicht ein Win32-Projekt. Die regulären Einstellungen kannst du ja dann von einem Win32-Projekt kopieren (Präprozessor, Subsystem und co.). Entweder du hast dein Visual Studio irgendwie komplett verstellt oder du postet nicht die Projektmappe, die du verwendest.


----------



## afg_style (24. April 2011)

Wie kann ich die Projektmappe posten?
Vorher habe ich den ganzen Ordner raufgeladen.


----------



## Muepe32 (24. April 2011)

Indem du an dem Ort, an dem dein Projekt gespeichert ist den Ordner mit der .sln drin zusammenpackst. Aber ich vermute eher, dass du irgendwelche ungünstigen Sachen eingefügt hast in Visual Studio.

Theoretisch am einfachsten herauszufinden wäre es, wenn ich zum Beispiel mit Teamviewer kurz schaue, ob mir gerade was auffällt, das verhindert dann auch, dass man aneinander vorbei redet


----------



## afg_style (24. April 2011)

Ich glaub ich weiß schon wo der Fehler liegt-------> Folgendes:

In dem Lib Ordner ("C:\Program Files (x86)\Microsoft DirectX SDK (November 2007)\Lib")
habe ich noch 2 weitere unterordner x86 und x64.
Ich glaub ich muss den Pfad ändern unzwar in ("C:\Program Files (x86)\Microsoft DirectX SDK (November 2007)\Lib\x86").
Aber ich weiß jetzt nicht wo ich das ändern kann.


----------



## Muepe32 (24. April 2011)

Da das weder in den Einstellungen des Linkers ist (zumindest in den von dir geposteten Projekten) und auch nicht in irgendwelchen globalen Einstellungen von Visual Studio (die du ja zurückgesetzt hast) kann eigentlich gar nirgends dieser Pfad eingetragen sein. Kommt noch erschwerend dazu, dass dieser Fehler ja offensichtlich sogar kommt, wenn du gar keinen Code in deinem Projekt hast.

Das Angebot von oben steht grundsätzlich immer noch: Ich kann mal mit Teamviewer kurz drüber schauen, ob mir was ins Auge sticht, da man öfters Dinge erst bemerkt, wenn man sie selber sieht.


----------



## afg_style (24. April 2011)

Ich weiß nicht, kann ich dir vertrauen?


----------



## Muepe32 (24. April 2011)

Ich hoffe doch, und du kannst ja jeder Zeit die Verbindung trennen/den Strom ausschalten, falls du mir doch nicht hättest vertrauen sollen. Sollten das aber jetzt auch eher per PN besprechen, hat ja mit dem Thema an sich nicht so direkt viel zu tun.


----------



## afg_style (24. April 2011)

OK, dann mach mal.


----------

