Warum gibt es einen solchen Fehler bei meiner Engine?



  • Hallo

    Ich bin dabei, eine Engine zu schreiben. Doch ich weiss jetzt nicht genau, warum dieser Fehler auftritt, wenn ich folgenden Code eingebe:

    // NPUEngine.h
    //
    // Die Hauptdatei der NPUEngine
    //
    #include <windows.h>
    
    // namespace
    //
    namespace NPU
    { 	
    	// Klasse erzeugen
    	//
    	class CNPUEngine
    	{
    	public:
    
    		// Memberfunktionen
    		//
    		bool Init ();
    		HWND InitWindow (HINSTANCE hInstance);
    		static LRESULT CALLBACK BaseWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
    		static LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
    
    	private:
    
    	};
    }
    
    // NPUEngine.cpp
    //
    // Die Hauptdatei der NPUEngine
    //
    #include "NPUEngine.h"
    
    HWND NPU::CNPUEngine::InitWindow(HINSTANCE hInstance)
    {
    	WNDCLASSEX wc;
    
    	ZeroMemory (&wc, sizeof (WNDCLASSEX));
    
    	wc.style = CS_HREDRAW | CS_VREDRAW;
    	wc.lpfnWndProc = BaseWndProc;
    	wc.hInstance = hInstance;
    	wc.lpszClassName = "My Window";
    	wc.lpszMenuName = 0;
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.hCursor = LoadCursor (NULL, IDC_ARROW);
    	wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    	wc.hbrBackground = (HBRUSH)GetStockObject (BLACK_BRUSH);
    	wc.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    
    	if (!RegisterClassEx (&wc))
    	{
    		MessageBox (NULL, "Fehler beim registerieren des Fenster", "Fehler aufgetreten",
    					MB_OK | MB_ICONEXCLAMATION);
    
    		return 0;
    	}
    
    	return (CreateWindowEx (NULL, "My Window", "My Window",
    							WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    							100, 100, 800, 600, NULL, NULL,
    							hInstance, NULL));
    }
    
    LRESULT CALLBACK NPU::CNPUEngine::BaseWndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	return CNPUEngine::WndProc (hwnd, msg, wParam, lParam);
    }
    
    LRESULT CALLBACK NPU::CNPUEngine::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch (msg)
    	{
    		// Ist eine Taste gedrückt worden?
    		//
    		case WM_KEYDOWN:
    			{
    				switch (wParam)
    				{
    					case VK_ESCAPE:
    						{
    							PostMessage (hwnd, WM_CLOSE, 0, 0);
    							return 0;
    						}
    					default: break;
    				}
    			} break;
    		case WM_DESTROY:
    			{
    				PostQuitMessage (0);
    				return 1;
    			}
    		default: break;
    	}
    
    	return DefWindowProc (hwnd, msg, wParam, lParam);
    }
    

    Folgende Fehler treten auf:

    ------ Erstellen gestartet: Projekt: NPUEngine, Konfiguration: Debug Win32 ------
    Kompilieren...
    NPUEngine.cpp
    Verknüpfen...
    MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".
    C:\Dokumente und Einstellungen\patrick\Eigene Dateien\Visual Studio 2008\Projects\NPUEngine\Debug\NPUEngine.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\patrick\Eigene Dateien\Visual Studio 2008\Projects\NPUEngine\NPUEngine\Debug\BuildLog.htm" gespeichert.
    NPUEngine - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Weiss jemand was ich falsch gemacht habe?

    Gruss Patrick



  • Öh, "Win32 Konsolenanwendung" anstatt "Win32 Anwendung" gewählt?



  • Nein ich habe schon eine Win32-Anwendung ausgewählt.



  • Die Fehlermeldung sagt doch schon alles. Du hast WinMain nicht implementiert.



  • Hehe, stimmt, wo denkst du denn beginnt dein Code?



  • Ja ich weiss, doch es soll ja eine Engine sein, und die WinMain rufe ich erst im richtigen Programm auf. Kann ich das irgendwie einstellen, damit der Compiler nicht mehr reklamiert?



  • Hihi, dann solltest du deinen Engine-Code zu einer Library machen. Bevor du hier fragst wie das geht, versuchs mal mit den FAQ oder google 😋


Anmelden zum Antworten