Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.12.2009, 21:44

Problem Kapitel 4 - Einlesen von Steuergeräten

Hallo,

ich habe mir auch das Buch angeschafft, welches mir auch bisher sehr gut gefällt (bisschen schleimen muss ja sein :) ). Ich beschäftige mich zur Zeit vorrangig mit dem Einlesen der Steuergeräte, da ich dieses zu einem anderem Zweck weiterverwenden möchte. Daher habe ich bisher nur den Kapiteln 1 & 4 große Beachtung geschenkt, und die anderen dazwischen mehr oder weniger überflogen. Vielleicht liegt auch hier schon ein grundlegender Fehler....

Ich benutze Visual Studio 2008 Express mit Win 7.
Ich hab mir Windows SDK (neueste Version) und Platform SDK installiert (hatte die neueste drauf, habe aber jetzt die Version ausprobiert die Herr Scherfgen bei den FAQ erwähnt).

Als Projekt habe ich eine Win32-Konsolenanwendung gewählt (liegt hier vllt schon der Fehler? Habe sonst noch Win32 Projekt zur Auswahl).
Habe auch in Visual Studio die jeweiligen Includes und Bilbiotheken von TriBase, DirectX SDK und Platform SDK unter den Optionen eingefügt.
Als zusätliche Abhängigkeiten habe ich bei den Projekteigenschaften folgende lib's eingetragen:
dinput8.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comctl32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
Nun zu meinem Quellcode, ich habe es bisher noch nicht mal bis zum "kompletten" einlesen der Geräte geschafft. Ich möchte nur Abfragen ob das Objekt erzeugt wurde oder nicht.

C-/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
27
28
29
30
31
32
33
34
35
/* Alle Geräte abfragen die angeschlossen sind */

#include <DInput.h>
#include <TriBase.h>

LPDIRECTINPUT8 g_pDirectInput = NULL; //DirectInput8-Objekt



int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCommandLine,
                   int iShowCommand)
{

if (FAILED(DirectInput8Create(hInstance,
                                0x0800,             //Version

                                IID_IDirectInput8,  //Schnittstellenversion

                                (void**)(&g_pDirectInput),  //Doppelzeiger auf Objekt

                                NULL)))
{
    //Es hat nicht funktioniert

    MessageBox(NULL, "IDirectInput8-Objekt konnte nicht erstellt werden!",
                "Fehler!", MB_OK | MB_ICONEXCLAMATION);
    return 1;
}
else
{
    //Alles ok

    MessageBox(NULL, "IDirectInput8-Objekt wurde erstellt!",
                "Information", MB_OK | MB_ICONEXCLAMATION);

}

TB_SAFE_RELEASE(g_pDirectInput);
}


Ich erhalte nun folgende Fehlermeldung:
Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_main" in Funktion "___tmainCRTStartup". MSVCRTD.lib
Fehler 4 fatal error LNK1120: 1 nicht aufgelöste externe Verweise.

Achja da ich diese Frage des öfteren schonmal gelesen habe, unter den Eigenschaften habe ich als Zeichensatz schon alle Möglichkeiten ausprobiert, ohne Erfolg. Ich habe es nun bei "Nicht festgelegt" gelassen.

Zudem würde ich noch gerne wissen, ob es zwangsläufig notwendig ist mir "WINAPI WinMai"n zu arbeiten? oder kann man auch ein "normales"
int main benutzten und die verwendeten Variablen global definieren?

Schonmal vielen Dank für Vorschläge.

2

04.12.2009, 21:56

steht im 1. Kapitel keine win32-konsolenanwendung sonder eine ganz normale. Und lies dir besser die anderen Kapitel durch ;)
Metal ist keine Musik sondern eine Religion.

3

04.12.2009, 23:26

Hallo,

die anderen Kapitel kommen später dran :), habe bisher auch noch keine große Erfahrung mit Grafiken etc. deswegen interessiert mich das Thema auch sehr. Aber zur Zeit steht erstmal noch ein Projekt auf dem Plan, wo ich eine Steuerung einbinden muss.

Zu deiner Aussage, habe eben nochmal im Buch nachgelesen. Dort steht auf seite 26 Kapitel 1.4.4.4 (habe 3. Ausgabe):

Zitat


Erzeugen Sie als erstes ein neues leeres Projekt vom Typ ihrer Wahl ( am besten eine Win32-Anwendung, denn damit können Sie die Quellcodes der Beispielprojekte direkt ohne Änderung übernehmen.)


Ist damit nicht die Win32-Konsolenanwendung gemeint? Oder verstehe ich da etwas falsch?

4

04.12.2009, 23:42

nein nein später kommt dann noch als anmerkung warum etwas schiefgehen könnte. Also man muss ein Win32 Projekt erstellen
Metal ist keine Musik sondern eine Religion.

5

05.12.2009, 11:56

Nochmals Hallo,
bis auf eine Fehlermeldung bei der MsgBox funktioniert es jetzt. Aber die bekomm ich sicher noch weg. Vielen Dank schonmal.

Aber ist es nicht Möglich die Funktion in eine normale Konsolenanwednung zu implementieren? Oder nur sehr viel schwieriger? :) Ich frage, da ich bereits ein bestehendes Projekt habe (halt eine Win32 Konsolenanwendung) in die ich später die Steuerung einbauen soll und es wäre eher suboptimal, wenn ich vorher das komplette Projekt umschreiben müsste.....

6

05.12.2009, 12:34

Ich sag doch les die ersten Kapitel denn in deinem Code wird die tb nicht initialisiert weder der Konfigurationsdialog aufgerufen. Es ist so lies die ersten Kapitel. Ist wirklich besser.
Metal ist keine Musik sondern eine Religion.

7

05.12.2009, 14:04

Fehler war nur ein falscher Zeichensatz, funktioniert jetzt alles ohne Probleme.
Wieso sollte tb (ich denke doch mal das dies für TriBase steht) nicht initialisiert werden? Habe doch die jeweiligen Includes/Bibliotheken angegeben? Oder war deine Antwort jetzt schon auf meine Frage mit der Win32-Anwednung bezogen, dass die tb dann nicht mehr initialisiert werden kann?

8

05.12.2009, 15:11

Du hast weder

C-/C++-Quelltext

1
tbInit()

noch

C-/C++-Quelltext

1
tbDoConfigDialog


DirectInput kann doch so wie oben in deinem Code gar nicht initialisiert werden
Metal ist keine Musik sondern eine Religion.

9

05.12.2009, 15:22

:idea: Achso meinst du das.
Ich lese mir gerade das 4. Kapitel durch (bin noch lange nicht fertig) und versuche nebenbei immer die entsprechenden Code-Beispiele selber auszuprobieren. Hier hatte ich deshalb schon beim ersten Quellcode diese Probleme. Ich denke doch (hab mir eben nur die fertigen Programmbeispiele angeschaut), dass der Umgang damit auch später noch erläutert wird, oder? in den bisherigen Quellcodes ging es ja wirklich nur um das erzeugen von Objekten bzw. das Abfragen von angeschlossenen Geräten...

10

05.12.2009, 15:27

Lies dir am besten das ganze buch durch. Da steht alles drin. Die ersten Kapitel sind nähmlich voraussetzung für das 4.
Metal ist keine Musik sondern eine Religion.

Werbeanzeige