Warum kommen diese Fehler?
-
Hallo
Ich habe es nun meine Engine so umgeschrieben, wie es userland mit gesagt hatte. Doch nun treten vier Fehler auf, bei diesem Code:
// Cube3DEngine.h // #ifndef CUBE3DENGINE_HPP #define CUBE3DENGINE_HPP #include <windows.h> #include "Cube3DEngineStructures.h" // create a namespace // namespace CE { // create a class // class Cube3DEngine { public: void Initialize(CE::Cube3DEngineProperties & props); void SetWindowProperties(int WindowWidth, int WindowHeight, int WindowDepth); HWND OpenWindow(HINSTANCE hInstance); static __declspec(dllexport)LRESULT WINAPI MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); private: int m_WindowWidth; int m_WindowHeight; int m_WindowDepth; }; // end of the class __declspec(dllexport)Cube3DEngine * CreateCube3DEngine(void) { return new Cube3DEngine(); } } // end of the namespace #endif // Cube3DEngine.cpp // #include "Cube3DEngine.h" //create a namespce // namespace CE { void Cube3DEngine::Initialize(CE::Cube3DEngineProperties & props) { props.WindowWidth = m_WindowWidth; props.WindowHeight = m_WindowHeight; props.WindowDepth = m_WindowDepth; } void Cube3DEngine::SetWindowProperties(int WindowWidth, int WindowHeight, int WindowDepth) { m_WindowWidth = WindowWidth; m_WindowHeight = WindowHeight; m_WindowDepth = WindowDepth; } HWND Cube3DEngine::OpenWindow(HINSTANCE hInstance) { WNDCLASSEX wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.cbSize = sizeof (wc); wc.lpfnWndProc = MsgProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon (NULL, IDI_APPLICATION); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = TEXT ("Cube3DEngine"); wc.hIconSm = LoadIcon (NULL, IDI_APPLICATION); if (RegisterClassEx (&wc) == 0) return 0; return CreateWindowEx (NULL, TEXT("Cube3DEngine"), "Cube3DEngine", WS_OVERLAPPEDWINDOW | WS_VISIBLE, GetSystemMetrics(SM_CXSCREEN)/2 - 250, GetSystemMetrics(SM_CYSCREEN)/2 - 187, 800, 600, NULL, NULL, hInstance, NULL); } LRESULT WINAPI Cube3DEngine::MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { // key was pressed // case WM_KEYDOWN: { switch (wParam) { case VK_ESCAPE: { PostMessage (hwnd, WM_CLOSE, 0, 0); return 0; } break; default: break; } } break; case WM_DESTROY: { PostQuitMessage (0); return 0; } default: break; } return DefWindowProc(hwnd, msg, wParam, lParam); } } // end of the namespace // main.h // #include <windows.h> #include <Cube3DEngine.h> #pragma comment(lib, "Cube3DEngine.lib") // create a class // class MyApplication : public CE::Cube3DEngine { public: MyApplication(); virtual ~MyApplication(); }; // main.cpp // #include "main.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { MSG msg; HWND hwnd; bool bDone = false; CE::Cube3DEngine * pCubeEngine; CE::Cube3DEngineProperties props; pCubeEngine = CE::CreateCube3DEngine(); pCubeEngine->Initialize(props); pCubeEngine->SetWindowProperties(800, 600, 32); hwnd = pCubeEngine->OpenWindow(hInstance); while (!bDone) { while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } delete pCubeEngine; return 0; }Und hier sind die vier Fehler, bei der Verwendung des Programm, main.cpp
------ Erstellen gestartet: Projekt: Cube3DEngineTest, Konfiguration: Debug Win32 ------ Verknüpfen... Bibliothek "C:\Dokumente und Einstellungen\patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngineTest\Debug\Cube3DEngineTest.lib" und Objekt "C:\Dokumente und Einstellungen\patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngineTest\Debug\Cube3DEngineTest.exp" werden erstellt. main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: struct HWND__ * __thiscall CE::Cube3DEngine::OpenWindow(struct HINSTANCE__ *)" (?OpenWindow@Cube3DEngine@CE@@QAEPAUHWND__@@PAUHINSTANCE__@@@Z)" in Funktion "_WinMain@16". main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CE::Cube3DEngine::SetWindowProperties(int,int,int)" (?SetWindowProperties@Cube3DEngine@CE@@QAEXHHH@Z)" in Funktion "_WinMain@16". main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CE::Cube3DEngine::Initialize(struct CE::Cube3DEngineProperties &)" (?Initialize@Cube3DEngine@CE@@QAEXAAUCube3DEngineProperties@2@@Z)" in Funktion "_WinMain@16". C:\Dokumente und Einstellungen\patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngineTest\Debug\Cube3DEngineTest.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise. Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngineTest\Cube3DEngineTest\Debug\BuildLog.htm" gespeichert. Cube3DEngineTest - 4 Fehler, 0 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Ich habe bei den Projekteinstellungen die Includeverzeichnisse und Libverzeichnisse eingestellt.
Kann mir jemand sagen, warum das die vier Fehler auftreten?
Gruss Patrick
-
Pack das __declspec(dllexport) zwischen "class" und den Klassennamen.
-
Ich habe nun __declspec(dllexport) zwieschen "class" und dem Klassennamen eingefügt. Doch es entstehen immer noch dieselben Fehler.
class __declspec(dllexport) Cube3DEngine ... ... ... __declspec(dllexport)Cube3DEngine * CreateCube3DEngine(void) { return new Cube3DEngine(); }