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

SaIG

Frischling

  • »SaIG« ist der Autor dieses Themas
  • Private Nachricht senden

1

21.07.2008, 12:51

zu dumm oder fehler im Buch?!

hab mal den Code von seite 109/110 Listing 2.51 abgetippt und bekjomme imemr diese meldungen

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
1>------ Erstellen gestartet: Projekt: bsp1.1, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>e:\- [ projects ] -\bsp1.1\bsp1.1\main.cpp(13) : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [48]' in 'LPCWSTR' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>e:\- [ projects ] -\bsp1.1\bsp1.1\main.cpp(25) : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [54]' in 'LPCWSTR' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>e:\- [ projects ] -\bsp1.1\bsp1.1\main.cpp(41) : error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'char [1024]' in 'LPCWSTR' nicht möglich
1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>Das Buildprotokoll wurde unter "file://e:\- [ projects ] -\bsp1.1\bsp1.1\Debug\BuildLog.htm" gespeichert.
1>bsp1.1 - 3 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========




Hier der code(die Fehler beziehen sich alle auf die Messageboxen)

Quellcode

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
36
37
38
39
40
41
42
43
44
45
46
47
#include <Windows.h>
#include <StdIO.h>
#include <D3D9.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, char* pcCmdLine, int iShowCmd)
{ 
PDIRECT3D9 pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if (!pD3D)
{
        MessageBox(NULL, 
            "Fehler beim Erzeugen der Direct3D Schnittstelle", 
            "Fehler", 
            MB_OK | MB_ICONEXCLAMATION); 
        return 1;
}

int iNumAdapters = pD3D->GetAdapterCount();

D3DADAPTER_IDENTIFIER9* pAdapters = new D3DADAPTER_IDENTIFIER9[iNumAdapters];

for (int iAdapter = 0; iAdapter < iNumAdapters; iAdapter++)
{
    if (FAILED(pD3D->GetAdapterIdentifier(iAdapter, 0, &pAdapters[iAdapter])))
    {
        MessageBox(NULL, "Adapterinformationen ko9nnten nicht abgefragt werden!", "Fehler", MB_OK | MB_ICONEXCLAMATION);

        pD3D->Release();
        delete[] pAdapters;
        return 1;
    }
    
    char acAdapterInfo[1024];
    sprintf(acAdapterInfo, "Adapter-ID: %d\n"
                            "Name: %s\n"
                            "Treiber: %s\n"
                            "nTreiberversion: %d",
                            iAdapter,
                            pAdapters[iAdapter].Description,
                            pAdapters[iAdapter].Driver,
                            pAdapters[iAdapter].DriverVersion);
    MessageBox(NULL, acAdapterInfo, "Adapter gefunden", MB_OK | MB_ICONEXCLAMATION);
    }
        pD3D->Release();
        delete[] pAdapters;
        return 0;

}

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

21.07.2008, 13:10

Boardsuche und FAQ sollten helfen.
@D13_Dreinig

3

21.07.2008, 13:28

Stichwort:
- Zeichensatz (UNICODE, ANSI)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

SaIG

Frischling

  • »SaIG« ist der Autor dieses Themas
  • Private Nachricht senden

4

21.07.2008, 14:17

... ich weis nicht nach was ich suchen soll da ich den fehler net verstehe ...(es deutet ja darauf hin das etwas mit den Falgs nicht simmt (laut zeilenangabe)


unicode /ansi was soll ich damit ?! im Fehler steht nix von zeichensätzen?! nur dass er char in ... was weisich was umwandeln will es aber net gebacken bekommt

5

21.07.2008, 14:28

Hmm. Danach suchen, was sonst?

Das ist nur ein Fehler diesbezüglich. WinAPI-Funktionen sind, sobald sie mit Zeichenketten arbeiten in ...A und ...W Version vorhanden. W für Widestring (UNICODE), A für ANSI.

Du hast in deinem Projekt als Zeichensatz UNICODE eingestellt, d.h. werden die WinAPI-Funktions-Makros zu der Variante mit W aufgelöst. Sie wollen einen Zeiger auf einen wchar_t (UNICODE), nicht auf einen char (ANSI).

Nun kannst du entweder hingehen und TCHAR verwenden, dass sich, wenn UNICODE eingestellt ist, nach wchar_t auflöst, sonst nach char, oder dich für eine Version der Funktion entscheiden.

C-/C++-Quelltext

1
2
3
4
5
char array[128];
...A(array, 128);

wchar_t uni[128];
...W(uni, 128);
...

oder

C-/C++-Quelltext

1
2
TCHAR array[128];
...(array, 128);
.

So dann gibt es noch das L, dass einen UNICODE-String andeutet:

C-/C++-Quelltext

1
2
const wchar_t* ptr_string(L"Sample"); // OK

const wchar_t* ptr_string("Sample"); // FEHLER! Ansi-String kann nicht in wchar_t* konvertiert werden!
... und das selbe auch anders herum.

Dafür gibt es auch wieder ein Makro: _T oder TEXT

C-/C++-Quelltext

1
const TCHAR* ptr_string(TEXT("Sample"));
... wird entsprechend aufgelöst, wenn UNICODE definiert ist oder eben nicht.

In deinem Beispiel ist UNICODE aktiviert, d.h. MessageBox wird zu MessageBoxW aufgelöst und will einen UNICODE-String. D.h. du müsstest ein L davor setzen. Oder einfach TEXT-Makro benutzen.

C-/C++-Quelltext

1
MessageBox(NULL, TEXT("Adapterinformationen konnten nicht abgefragt werden!"), TEXT("Fehler"), MB_OK | MB_ICONEXCLAMATION); 

Oder du entscheidest dich einfach für einen Zeichensatz und machst es so:

C-/C++-Quelltext

1
MessageBoxA(NULL, "Adapterinformationen konnten nicht abgefragt werden!", "Fehler", MB_OK | MB_ICONEXCLAMATION);
und schon geht alles wieder!
[/cpp] ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

6

21.07.2008, 14:28

Zeichensatz einfach auf Multibyte/nicht festgelegt umstellen! Musst allerdings für jedes Projekt dann extra machen, oder du verwendest Unicode, aber das hab ich selbst noch nie gemacht -> kann dir nicht sagen wir das geht.
Die Frage wurde aber, so glaub ich doch, schon oft beantwortet.

SaIG

Frischling

  • »SaIG« ist der Autor dieses Themas
  • Private Nachricht senden

7

21.07.2008, 14:44

aja habs mit messageboxA gelößt ... ez hab ichs auch verstanden ... dank dir

jo ich habe auch nach unicode etc gesucht aber da kommt so viel wenn man hier sucht und ich konnte mein Problem nicht wiederfinden.


ez hab ich aber leider nochn Problem

Quellcode

1
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_Direct3DCreate9@4" in Funktion "_WinMain@16".



ja ich weis es steht im buch dass dann wahrscheinlich die d3d9.lib nich verlinkt ist .... aber ich hab das verzeichnis angegebn wo sie liegt (extras - Optionen - vc++ verzeichnisse ) ... oder soll ich die noch wo eintragen? hab sonst nix gefunden wo ich se noch hätte reinschrieben können :(

SaIG

Frischling

  • »SaIG« ist der Autor dieses Themas
  • Private Nachricht senden

8

21.07.2008, 15:13

nach noch ein bissle googlen hab ichs mit

Quellcode

1
#pragma comment(lib, "d3d9.lib")


zum laufen gebracht aber ... ich schätze wenn ich das lib verzeichnis noch wo eintrage brauch ich die zeile net ... nur wo ?

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

9

21.07.2008, 15:57

1.)

Zitat von »"SaIG"«

aja habs mit messageboxA gelößt ... ez hab ichs auch verstanden ... dank dir

jo ich habe auch nach unicode etc gesucht aber da kommt so viel wenn man hier sucht und ich konnte mein Problem nicht wiederfinden.

Hier ist die Lösung des Problems ausführlich erklärt.

2.)
So geht es mit VC++ 2005:
Projekt/Eigenschaften/Konfigurationseigenschaften/Linker/Eingabe/zusätzliche Abhängigkeiten <- d3d9.lib hineinschreiben
Wenn es nicht bei der Installation von DX automatisch erledigt wurde musst du unter Extras/Optionen/Projekte und Projektmappen/VC++-Verzeichnisse noch unter Bibliotheksdateien den Ordner, in dem die lib Datei sich befindet, und unter Headerdateien den Ordner mit den Headerdateien angeben.
Signaturen werden überbewertet

Werbeanzeige