 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
XXL Mini JLI'ler
Anmeldedatum: 13.08.2004 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 13.08.2004, 10:22 Titel: riesen Problem |
|
|
Hallo,
ich hab da ein Problem:
immer, wenn ich unter Visual Studio Net 2003 das Sample "D3DDRAWTEXT" aus dem Buch starten will, kommt unter anderem diese Fehlermeldung:
error C2660: 'ID3DXFont::DrawTextA': Funktion akzeptiert keine 5 Argumente
kann mir mal einer sagen, wo der fehler liegt, und was ich machen kann. das komische ist, dass das selbe beispiel auf meinem anderen rechner funktionier. auch da ist DX 9.0c installiert und ich nutze das Visual Studio...
Bitte, brauche dringend Hilfe... |
|
Nach oben |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 13.08.2004, 10:26 Titel: |
|
|
Ein bisschen Code wäre hilfreich. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
 |
XXL Mini JLI'ler
Anmeldedatum: 13.08.2004 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 13.08.2004, 10:34 Titel: |
|
|
es ist das beispiel aus dem buch :
/*
Jetzt lerne ich Spieleprogrammierung mit DirectX und Visual C++
Programmname: D3DDrawText
Beschreibung: Dieses Programm zeigt, wie Text mit DirectX Graphics ausgegeben wird
Führen Sie das Programm durch Drücken von F5 aus.
*/
// Headerdateien
#include <d3d9.h>
#include <d3dx9.h>
// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);
// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// Funktion zur Initialisierung von Direct3D
BOOL InitDirect3D(HWND hWnd);
// Direct3D-Objekte wieder freigeben
void CleanUpDirect3D(void);
// Direct3D-Font erzeugen
void CreateD3DFont(void);
// Zeiger auf das Direct3D-Objekt (Interface)
LPDIRECT3D9 lpD3D = NULL;
// Zeiger auf das Direct3D-Device
LPDIRECT3DDEVICE9 lpD3DDevice = NULL;
// Zeiger auf das Direct3D-Font-Objekt
LPD3DXFONT lpD3DFont = NULL;
// Das Fensterhandle
HWND hWnd = 0;
// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz
HINSTANCE hPrevInstance, // Handle der letzten Instanz
LPSTR lpCmdLine, // Kommandozeile
int nCmdShow) // Art wie das Fenster angezeigt werden soll
{
// Fenster erzeugen und Handle speichern
hWnd = CreateMainWindow(hInstance);
// Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
if(0 == hWnd)
{
MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
return -1;
}
// Direct3D initialisieren
if(!InitDirect3D(hWnd))
{
return -1;
}
// Schrift erzeugen
CreateD3DFont();
// Struktur, in der Informationen zur Nachricht gespeichert werden
MSG msg;
// Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
while(GetMessage(&msg,NULL,0,0))
{
// Nachricht an die Callbackfunktion senden
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Freigeben der Objekte
CleanUpDirect3D();
// Rückgabewert an Windows
return 0;
}
// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass =
{
sizeof(WNDCLASSEX), // Größe angeben
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile
MessageHandler, // Callback-Funktion
0, // Zusätzliche Angaben
0, // nicht benötigt
hInstance, // Anwendungsinstanz
LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo
LoadCursor(NULL, IDC_ARROW), // Normaler Cursor
(HBRUSH)GetStockObject(WHITE_BRUSH), // Weißer Pinsel
NULL, // kein Menü
"WindowClass", // Der Name der Klasse
LoadIcon(NULL, IDI_WINLOGO) // Windows Logo
};
// Klasse registrieren
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"D3DDrawText", // Fenstertitel
WS_OVERLAPPEDWINDOW | // Fenster
WS_VISIBLE, // Eigenschaften
0, 0, 800, 600, // Anfangsposition und Größe
NULL, // Handle des Elternfensters
NULL, // Handle des Menüs
hInstance, // Anwendungsinstanz
NULL); // wird nicht benötigt
}
// Diese Funktion wird von Windows aufgrufen, wenn
// eine Nachricht für Ihr Programm vorliegt
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// Farbe für die Füllung des Backbuffer festlegen
D3DCOLOR ClearColor = D3DCOLOR_XRGB(0,0,0xFF);
// testen, um welche Nachticht es sich handelt
switch(msg)
{
// Programm beenden, wenn das Fenster
// geschlossen wird
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
case WM_KEYDOWN:
switch(wParam)
{
// Wenn ESC gedrückt, Anwendung beenden
case VK_ESCAPE:
DestroyWindow(hWnd);
break;
}
break;
case WM_PAINT:
D3DCOLOR ClearColor = D3DCOLOR_XRGB(0,0,0xFF);
D3DCOLOR TextColor = D3DCOLOR_XRGB(0xFF,0,0);
// Rechteck anlegen, nur die linke, obere
// Koordinate festlegen, die andere wird
// berechnet
// Puffer mit blau füllen
lpD3DDevice->Clear(0,0,
D3DCLEAR_TARGET,
ClearColor,
0,0);
RECT r = { 100, 100, 0, 0 };
lpD3DDevice->BeginScene();
// hier tritt es zum ersten mal auf... !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Größe des Rechtecks berechnen
lpD3DFont->DrawText("Hallo Direct3D",
-1,
&r,
DT_CALCRECT,
TextColor);
// Text ausgeben
lpD3DFont->DrawText("Hallo Direct3D",
-1,
&r,
DT_CENTER,
TextColor);
lpD3DDevice->EndScene();
// Szene anzeigen
lpD3DDevice->Present(0,0,0,0);
break;
}
// Standardnachrichtenverarbeitung von Windows
return DefWindowProc(hwnd, msg, wParam, lParam);
}
// Direct3D initialisieren
BOOL InitDirect3D(HWND hWnd)
{
// Direct3D-Objekt erzeugen
lpD3D = Direct3DCreate9(D3D_SDK_VERSION);
if(NULL == lpD3D)
{
// Fehler, D3D-Objekt wurde nicht erzeugt
return FALSE;
}
// Parameter für den Modus festlegen
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams,sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = TRUE;
PParams.BackBufferWidth = 800;
PParams.BackBufferHeight = 600;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8;
// Direct3D-Gerät anlegen
if(FAILED(lpD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&PParams,
&lpD3DDevice)))
{
// Fehler, kann Gerät nicht anlegen
return FALSE;
}
return TRUE;
}
void CreateD3DFont(void)
{
// Struktur für die Beschreibung der Schriftart
// anlegen und Elemente mit 0 initialisieren
LOGFONT LogFont = { 0 };
// das Element lfFaceName muss den Namen der
// gewünschten Schriftart enthalten
strcpy(LogFont.lfFaceName, "Arial");
// nach erfolgreichem Aufruf zeigt lpD3DFont
// auf ein Objekt vom Typ D3DXFont
D3DXCreateFontIndirect(lpD3DDevice,
&LogFont,
&lpD3DFont);
}
// Direct3D Objekte freigeben
void CleanUpDirect3D(void)
{
// testen, ob die Objekt angelegt
// wurden und ggf. freigeben
if(NULL != lpD3DFont)
{
lpD3DFont->Release();
lpD3DFont = NULL;
}
if(NULL != lpD3DDevice)
{
lpD3DDevice->Release();
lpD3DDevice = NULL;
}
if(NULL != lpD3D)
{
lpD3D->Release();
lpD3D = NULL;
}
}
wie gesagt, es ist ein buchbeispiel, was auf meinem notebook funktioniert. der einzige unterschied der beiden rechner ist das SP2..
das deinstalliere ich aber gerade, um festzustellen, ob das die ursache sein kann... |
|
Nach oben |
|
 |
HotAcid Super JLI'ler

Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 13.08.2004, 11:03 Titel: |
|
|
kann sein, dass mit dem SP was bei DiretX verändert wurde. such doch mal in der HIlfe nach der entsprechenden FUnktionm, vermutlich wurden hier die Argumente verändert.
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 13.08.2004, 11:37 Titel: |
|
|
Seit dem Summer Update 2003 hat die DrawText Funktion andere Parameter --> msdn _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling |
|
Nach oben |
|
 |
XXL Mini JLI'ler
Anmeldedatum: 13.08.2004 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 13.08.2004, 11:43 Titel: |
|
|
@BlackLordOfDragons
das kann ja gut sein, aber auf meinem laptop ist genau das selbe installiert und da geht es einwandfrei....
wie kannst du dir das dann erklären? |
|
Nach oben |
|
 |
XXL Mini JLI'ler
Anmeldedatum: 13.08.2004 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 13.08.2004, 11:51 Titel: |
|
|
was mich außerdem wundert ist das:
error C2660: 'ID3DXFont::DrawTextA': Funktion akzeptiert keine 5 Argumente
wieso steht da DrawTextA?? im Code steht nämlich das:
lpD3DFont->DrawText("Hallo Direct3D",
-1,
&r,
DT_CALCRECT,
TextColor);
im ganzen code steht nirgends DrawTextA???
ist das normal?? |
|
Nach oben |
|
 |
abc_d JLI Master Trainee

Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 13.08.2004, 11:56 Titel: |
|
|
Christian hat hier iirgendwo seine Beispiele, fürs Summer Update 2003 upgedatet hochgeladen. Wenn du das DX SDK Summer Update 2003 oder höher installierst hat die DrawText Funktion andere Parameter, das kannst du mir glauben
DrawText verweißt AFAIK auf DrawTextA, das macht z.B. MessageBox auch, sihe windows header dateien. Ich glaube wegen Unicode und solchen Dingen, ich kann mich aber auch irren.
[edit]
http://www.jliforum.de/board/viewtopic.php?t=1825&highlight=summer+update _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
Never touch a running System - der Systemling
Zuletzt bearbeitet von abc_d am 13.08.2004, 12:00, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
XXL Mini JLI'ler
Anmeldedatum: 13.08.2004 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 13.08.2004, 11:57 Titel: |
|
|
ok ich suche mal den den geänderten beispielen. ich hab nämlich überall da probleme, wo was mit createFont kommt.. jedes mal da meckert er...
sind die beispiele hier irgendwo im forum? |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 13.08.2004, 12:01 Titel: |
|
|
Die Beispiele sind hier im Forum. Es kann nicht sein, dass du auf beiden Computern das gleiche installiert hast. DrawTextA vs. DrawTextW ist ANSI vs. WideChar (UNICODE) je nach Compilereinstellungen wird DrawText das eine oder das andere. |
|
Nach oben |
|
 |
XXL Mini JLI'ler
Anmeldedatum: 13.08.2004 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 13.08.2004, 12:05 Titel: |
|
|
so problem gelöst, mit den programmänderungen geht es...
was mich nur wundert ist, dass es wirklich auf dem notebook geht. auch er hat dx 9.0c, visual net 2003 ABER KEIN xp sondern 2000.. vielleicht liegt es daran..
hab jetzt den code runtergeladen und es geht..
vielen dank für deine hilfe..
thx |
|
Nach oben |
|
 |
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 13.08.2004, 13:25 Titel: |
|
|
hat der einfach nur dx9.0c , oder dx9.0c SDK? |
|
Nach oben |
|
 |
XXL Mini JLI'ler
Anmeldedatum: 13.08.2004 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 13.08.2004, 14:44 Titel: |
|
|
ich habe das sdk... 9.0c auf beiden rechnern.... |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|