void __cdecl render(void)" (?render@@YAXXZ)" in Funktion "_WinMain@16"



  • Ganz einfache Sache:
    1>WinMain.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl render(void)" (?render@@YAXXZ)" in Funktion "_WinMain@16".

    Wo ist das Problem alles ist korekt in den Projekteigenschaften eingestellt.

    #include <d3d9.h>
    #include <Windows.h>
    #include <WindowsX.h>
    #include <d3dx9.h>
    #include <D3Dcompiler.h>
    #include <strsafe.h>
    #include <D3D10.h>
    #include <DxErr.h>
    #include <conio.h>
    #include <iostream>
    
    using namespace std;
    
    #define D3DFVF_MY_VERTEX (D3DFVF_XYZ | D3DFVF_DIIFUSE)
    #define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0) 
    
    struct Vertex
    {
        float x, y, z;
        float tu, tv;
    };
    
    Vertex triangle[]=
    {-1.0f, 0.0f, 0.0f,		0.0f, 1.0f, 0.0f};
    
    //----------------------------------
    //PRÄPROZESSOR
    //----------------------------------
    
    #pragma comment(lib,"d3d9.lib")		//Ohne die beiden geht Direct3DCreate9 nicht!!!
    #pragma comment(lib,"d3dx9.lib")	//
    
    //----------------------------------
    //Globals
    //----------------------------------
    
    LPDIRECT3D9			g_pD3D		=NULL;
    LPDIRECT3DDEVICE9	g_pd3dDevice=NULL;
    
    //----------------------------------
    //PROTOTYPEN
    //----------------------------------
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  //Zum Epfangen der Eingaben des Benutzers
    const char szAppName[] = "Ein eigenes Fenster";		   //Fensterklassen-Name
    
    void init(void);
    void shutDown(void);
    void render(void);
    
    //----------------------------------
    //WinMain
    //----------------------------------
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,   //Sub Beginn
                           LPSTR lpCmdLine, int nCmdShow)
    {
    	WNDCLASSEX winClass;
    	MSG uMsg;
    
    	memset(&uMsg,0,sizeof(uMsg));
    
    	winClass.lpszClassName		= "Final Times";
    	winClass.cbSize				= sizeof(WNDCLASSEX);
    	winClass.style				= CS_HREDRAW | CS_VREDRAW;
    	winClass.lpfnWndProc		= WndProc;
    	winClass.hInstance			= hInstance;
    
    	winClass.hIcon				= LoadIcon(hInstance,(LPCSTR)IDI_APPLICATION);
    	winClass.hIconSm			= LoadIcon(NULL,(LPCSTR)IDC_ARROW);
    	winClass.hCursor			= LoadCursor(NULL,IDC_ARROW);
    
    	winClass.hbrBackground		=(HBRUSH)GetStockObject(BLACK_BRUSH);
    
    	winClass.lpszMenuName		= NULL;
    
    	winClass.cbClsExtra			= 0;
    	winClass.cbWndExtra			= 0;
    
    	init();
    
    	render();
    };
    
    //----------------------------------
    //Message-Handler
    //----------------------------------
    LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
    	{
    		switch(message)
    		{
    		case WM_DESTROY:
    			{
    				PostQuitMessage(0);
    				return 0;
    			}
    		}
    
    		return DefWindowProc(hWnd,message, wParam,lParam);
    	}
    //----------------------------------
    //init()
    //----------------------------------
    void init( void )
    {
    
    	g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    
    	//Variablen anlegen und Parameter füllen
    	HRESULT initD3D(HWND hWnd);
    	{
    		D3DPRESENT_PARAMETERS D3Dpp;
    	memset(&D3Dpp,0,sizeof(D3Dpp));
    
    	D3Dpp.Windowed				=FALSE;
    	D3Dpp.EnableAutoDepthStencil=TRUE;
    	D3Dpp.AutoDepthStencilFormat=D3DFMT_D16;
    	D3Dpp.SwapEffect			=D3DSWAPEFFECT_DISCARD;
    	D3Dpp.BackBufferWidth		=1920;
    	D3Dpp.BackBufferHeight		=1080;
    	D3Dpp.BackBufferFormat		=D3DFMT_X8R8G8B8;
    	D3Dpp.PresentationInterval	=D3DPRESENT_INTERVAL_IMMEDIATE;
    
    		g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    	if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
    	{
    		MessageBox(0,"Direct3DCreate9 FAILES",0,0);
    	}
    	}
    
    	//Device erzeugen
    	LPDIRECT3DDEVICE9 pD3DDEVICE = NULL;
    
    	//Displaymode erfragen
    	int nMode = 0;
    	bool bDesiredAdapterModeFound = false;
    
    	int nMaxAdapterModes = g_pD3D->GetAdapterModeCount(D3DADAPTER_DEFAULT,D3DFMT_X8R8G8B8);
    
    	//Hardware T und L?
    	D3DCAPS9 D3DCaps;
    
    	g_pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&D3DCaps);
    
    	DWORD vertexProcessing;
    	vertexProcessing = 0;
    
    	if(D3DCaps.DevCaps& D3DDEVCAPS_HWTRANSFORMANDLIGHT)
    	{
    		vertexProcessing = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    
    		if(D3DCaps.DevCaps &D3DDEVCAPS_PUREDEVICE)
    		{
    			vertexProcessing|= D3DCREATE_PUREDEVICE;
    		}
    	}else{
    			vertexProcessing= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    	}
    
    }
    
    VOID Render()
    {
    	//HINTERGRUNF LÖSCHEN UND MIT FARBE FÜLLEN
    	g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0 /*FARBE*/ ), 1.0f, 0);
    
    	//SZENE BEGINNEN
    	g_pd3dDevice->BeginScene();
    
    		g_pd3dDevice->EndScene();
        g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
    
    }
    


  • Die Funktion Render ist unten groß geschrieben, wird aber klein vorwärtsdeklariert und aufgerufen..



  • Danke für die Hilfe 😃
    Aber jetzt wird mir diese Meldung an den Kopf geworfen.
    Ich verstehe zwar die Meldung sehe aber den Fehler nicht:
    Sry für den Post aber manchmal bin einfach blind.

    1>------ Erstellen gestartet: Projekt: DX-Übungen, Konfiguration: Debug Win32 ------
    1> WinMain.cpp
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cstdio(48): warning C4995: 'gets': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cstdio(52): warning C4995: 'sprintf': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cstdio(55): warning C4995: 'vsprintf': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cstring(21): warning C4995: 'strcat': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cstring(22): warning C4995: 'strcpy': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cwchar(30): warning C4995: 'swprintf': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cwchar(31): warning C4995: 'vswprintf': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cwchar(33): warning C4995: 'wcscat': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\cwchar(35): warning C4995: 'wcscpy': der Name, der als #pragma markiert war, wurde verworfen
    1>c:\users\kilian\documents\visual studio 2010\projects\dx-übungen\dx-übungen\winmain.cpp(91): error C3861: "Render": Bezeichner wurde nicht gefunden.
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • Selbst gelöst jetzt sowas:

    Unbehandelte Ausnahme bei 0x00be1438 in DX-Übungen.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.



  • Du hast die Zeiger g_pd3dDevice und g_pD3D nirgends auf ein echtes Objekt umgebogen, da versucht die Render()-Funktion jetzt, den NULL-Zeiger zu dereferenzieren.



  • Du versuchst halt irgendwo von nem Nullpointer zu lesen. Wo könnte ich nur sagen wenn ich mir das jetzt alles haarklein durchlese, dazu habe ich aber gerade nicht wirklich Lust 😃

    Weist du wie ein Debugger funktioniert? Ansonsten mach halt MessageBoxen in deinen Code und guck wo der Fehler auftritt. Dann kannst du ihn beheben oder halt noch mal nachfragen.

    Dein Code sieht zudem ziemlich unordentlich und zu 95% kopiert aus.. versuche doch erstmal da irgendwie Ordnung reinzubringen und alles halbwegs zu verstehen. Dann lösen sich viele Probleme von selbst.



  • warning C4995: 'sprintf': der Name, der als #pragma markiert war, wurde verworfen

    Die deutsche Übersetzung ist sowas von unglücklich.

    Die englische Meldung lautet: warning C4995: 'sprintf': name was marked as #pragma deprecated

    Und das bedeutet, dass die Funktion mit dem Namen "sprintf" mit "#pragma deprecated" (Hinweis: veraltete Funktion) markiert wurde, d.h. die Funktion ist veraltet (da unsicher wegen Stack / DoS-attackierbar) und soll nicht mehr verwendet werden, besser ist die Verwendung von sprintf_s.



  • Wichtige Durchsage: Man lernt Programmieren nicht, indem man Codefetzen zusammenkopiert und dann jedes Problem von anderen sufflieren laesst. Da ist mehr Eigeninitiative gefragt.


Log in to reply