"DirectX 11", Visual C++ 2010 macht nicht mit!



  • Halle liebe Community,

    ich bin gerade dabei mir DirectX 11 anzueignen, da ich schon einige erfahrung mit C++ habe. Doch alles weiß ich leider noch nicht und stoße dabei auf einen Fehler oder Hinweis, der meine Arbeit aus einem gewissen grund stört.
    Hier der Code von meinen bisherigem Verlauf (könnte ja ein Fehler dabei sein den ich übersehen habe)

    # include <Windows.h>
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    int WINAPI wWinMain (HINSTANCE hInstance, HINSTANCE prevInstance,
    					 LPWSTR cmdLine, int cmdShow)
    
    {
    	UNREFERENCED_PARAMETER (prevInstance);
    	UNREFERENCED_PARAMETER (cmdLine);
    
    	WNDCLASSEX wndClass = {0};
    	wndClass.cbSize = sizeof (WNDCLASSEX);
    	wndClass.style = CS_HREDRAW | CS_VREDRAW;
    	wndClass.lpfnWndProc = WndProc;
    	wndClass.hInstance = hInstance;
    	wndClass.hCursor = LoadCursor (NULL, IDC_ARROW);
    	wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    	wndClass.lpszMenuName = NULL;
    	wndClass.lpszClassName = "BlackBox v1.0";
    
    	if(!RegisterClassEx(&wndClass))
    		return -1;
    
    	RECT rc = {0, 0, 640, 480};
    	AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
    
    	HWND hwnd = CreateWindowA ("BlackBoxClass", "BlackBox v1.0",
    		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left,
    		rc.bottom - rc.top, NULL, NULL ,hInstance, NULL);
    
    	if(!hwnd)
    		return -1;
    
    	ShowWindow(hwnd, cmdShow);
    
    	MSG msg = {0};
    	while (msg.message != WM_QUIT)
    	{
    		if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    	return static_cast<int>(msg.wParam);
    }
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	PAINTSTRUCT paintStruct;
    	HDC hDC;
    
    	switch(message)
    	{
    	case WM_PAINT:
    		hDC = BeginPaint (hwnd, &paintStruct);
    		EndPaint(hwnd, &paintStruct);
    		break;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hwnd, message, wParam, lParam);
    	}
    	return 0;
    }
    

    und hier das Resultat des Compilers

    "BlackBox v1.0.exe": "C:\Users\Mr.William\Documents\Visual Studio 2010\Projects\BlackBox v1.0\Debug\BlackBox v1.0.exe" geladen, Symbole wurden geladen.
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\ntdll.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\kernel32.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\KernelBase.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\user32.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\gdi32.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\lpk.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\usp10.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\msvcrt.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\advapi32.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\sechost.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\rpcrt4.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\sspicli.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\cryptbase.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\msvcr100d.dll" geladen, Symbole wurden geladen.
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\imm32.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\msctf.dll" geladen, Cannot find or open the PDB file
    "BlackBox v1.0.exe": "C:\Windows\SysWOW64\uxtheme.dll" geladen, Cannot find or open the PDB file
    Das Programm "[5468] BlackBox v1.0.exe: Systemeigen" wurde mit Code -1 (0xffffffff) beendet.
    

    Das Problem, das Programm wird gestartet und auch wieder beended, aber
    er zeigt kein Resultat meines Codes.

    Ich würde mich über eine kleine Stütze freuen.

    Mit freundlichen Gruß
    Mr.William



  • Schau dir mal den Funktionskopf von WinMain an.
    Dort solltest du wWinMain zu WinMain ändern.

    Als nächstes müsstest du aus dem LPWSTR ein LPSTR machen.
    Dann sollte es laufen.



  • Laut Debugger returned dein Programm -1 und beendet. Wenn ich deinen Code so anschau, bedeutet das wohl, dass das Fenster nicht erzeugt wurde!?



  • Okay,

    wenn er das Programm mit -1 Returnd gibt es nur zwei stellen.
    entweder

    if(!RegisterClassEx(&wndClass))
    		return -1;
    

    hier oder hier

    if(!hwnd)
    		return -1;
    

    Also ich habe das ganze mal ausprobiert und bei DEV-CPP funzt der Code
    aber nur mit WinMain und nicht wWinMain usw. Aber er kann das Fenster nicht
    halten. Bei Visual 2010 erstellt er garkein Fenster und bricht bei return -1 ab
    und zeigt die Hinweise/Fehler mit den dll's.

    Ich probiere morgen weiter. Würde mich aber trozdem weiter über Hinweise freuen.



  • Die Frage ist doch wieso du bei wWinMain (was du nicht ändern musst wie Schlaumeier Otafu-Otaku das behauptet!) ein CreateWindowA benutzt. Entweder machst du nur CreateWindow daraus und achteste darauf Unicode aktive zu haben oder rufst direkt CreateWindowW auf. - Das sind Vorschläge, daher weiß ich nicht genau, ob genau das dein Problem löst!



  • Habe wieder einbischen rumprobiert und es sieht fast so aus als würde Visual 2010 c++ nicht ganz laufen, denn es hatte ganz kurz funkzioniert. Kann es sein das Verzeichnisse oder Linker fehlen? Welche könnten bei diesen Fehlern in Frage kommen?



  • Was für Fehler?



  • Ich denke mal das Visual C++ 2010 probleme hat auf die Verzeichnisse zu zugreifen, wo kernel32.dll usw. angelegt sind. Vorher hatte ich keine Probleme doch seit geraumer Zeit wird dies immer wieder angezeigt. Selbst bei dem kleinsten Programm zeigt er an das er es geladen hat aber er kann es nicht finden oder öffnen diese PDB files. Darum die Frage liegt es am Bediener (also mir) oder doch bei dem Programm.



  • Hast du denn Debugsymbole für die System dlls installiert oder wieso genau wundert es dich, dass er diese nicht finden kann? Für die Funktion deines Programms ist das völlig irrelevant. Dein Programm wird laut obigem Log völlig korrekt gestartet und ausgeführt und returned -1. Und das hat nichts mit irgendwelchen Einstellungen oder falschen Libraries zu tun, sondern liegt sehr wahrscheinlich an einem Programmierfehler deinerseits. Find raus, wieso dein Programm -1 returned...



  • ...



  • Nein habe ich anscheinend nicht und da ich das noch nie brauchte, würde ich mich freuen wenn du mir sagst wie das geht.^^



  • Mr.William schrieb:

    Nein habe ich anscheinend nicht und da ich das noch nie brauchte, würde ich mich freuen wenn du mir sagst wie das geht.^^

    Wie was geht?



  • MSDN Library schrieb:

    HWND WINAPI CreateWindow(
      _In_opt_  LPCTSTR lpClassName,
      _In_opt_  LPCTSTR lpWindowName,
      _In_      DWORD dwStyle,
      _In_      int x,
      _In_      int y,
      _In_      int nWidth,
      _In_      int nHeight,
      _In_opt_  HWND hWndParent,
      _In_opt_  HMENU hMenu,
      _In_opt_  HINSTANCE hInstance,
      _In_opt_  LPVOID lpParam
    );
    

    Mr.William schrieb:

    wndClass.lpszClassName = "BlackBox v1.0";
    

    Mr.William schrieb:

    HWND hwnd = CreateWindowA ("BlackBoxClass", "BlackBox v1.0",
    

    Fällt dir was auf?



  • Also mit GetLaseError() wurden keine Probleme aufgefunden. Wie sieht es eigentlich aus mit Antivir-Software oder Viren, die die arbeit von Visual C++ 2010 verhindern kann?



  • Nochmal: Visual Studio arbeitet völlig einwandfrei, das Problem liegt an deinem Code. Die Antwort steht im Post über deinem.



  • Also danke sowirddasnixlassessein dein hinweis war ins schwarze getroffen. Das Programm wird jetzt ausgeführt.

    So sieht es viel besser aus.^^

    HWND hwnd = CreateWindowA ("BlackBoxWindowClass", "BlackBox",
    		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left,
    		rc.bottom - rc.top, NULL, NULL ,hInstance, NULL);
    
    wndClass.lpszClassName = "BlackBoxWindowClass";
    

    Danke an alle die mir geholfen haben.



  • Und für die Zukunft einfach folgende Grundregel merken: Die Wahrscheinlichkeit, dass die Ursache für derartige Fehler nicht in deinem Code verborgen liegt, ist extrem gering. 😉


Anmelden zum Antworten