0

因此,我一直在尝试修复游戏引擎 SDK 中的一个奇怪错误,其中使用 Windows 加载光标而不是游戏自己的光标。解决方法在这里:http ://www.crydev.net/wiki/index.php/Use_Custom_Cursor#Step_1:_Fixing_The_Cursor_Bug 。

我遵循了修复,但在构建游戏 DLL 时我不断得到这些:

Error   1   error LNK2019: unresolved external symbol "public: __thiscall MODCursor::MODCursor(void)" (??0MODCursor@@QAE@XZ) referenced in function "public: __thiscall CGame::CGame(void)" (??0CGame@@QAE@XZ)  C:\Users\User\Desktop\Crytek\Mods\CryEngine2\Code\Game.obj  GameDll

Error   2   error LNK2019: unresolved external symbol "public: __thiscall MODCursor::~MODCursor(void)" (??1MODCursor@@QAE@XZ) referenced in function "public: virtual __thiscall CGame::~CGame(void)" (??1CGame@@UAE@XZ)    C:\Users\User\Desktop\Crytek\Mods\CryEngine2\Code\Game.obj  GameDll

是的,通常我可以通过正确定义类来很容易地解决这个问题,但在这种情况下它不起作用。我做错了什么?

这些文件与修复指南中的文件相同,因此在此处发布文件实际上没有任何意义,因为它们会在这里浪费空间。如果确实需要这些文件来调查此问题,如果有人要求,我会上传它们。

也许修复本身存在错误?修复与我的构建的一个可能区别是修复使用的是 Visual Studio 2008,而我使用的是 Visual Studio 2013。

4

1 回答 1

1

也许尝试把它全部放在 .h 文件中:

#ifndef _MOD_CURSOR
#define _MOD_CURSOR

#include <windows.h>
#include "resource.h"

#undef GetUserName // This is a macro in windows.h, gives issues with GetUserName() of ISystem

class MODCursor : public ISystemEventListener
{
public:
    MODCursor() {
        gEnv->pSystem->GetISystemEventDispatcher()->RegisterListener(this);
        m_cursor = LoadCursor((HINSTANCE)g_hInst, MAKEINTRESOURCE(IDC_CURSOR1));
        SetCursor(m_cursor);
    }
    ~MODCursor(){
        gEnv->pSystem->GetISystemEventDispatcher()->RemoveListener(this);
    }
private:
    virtual void OnSystemEvent( ESystemEvent event,UINT_PTR wparam,UINT_PTR lparam ) {
        if(event == ESYSTEM_EVENT_TOGGLE_FULLSCREEN || event == ESYSTEM_EVENT_RESIZE || event == ESYSTEM_EVENT_CHANGE_FOCUS){
            if (m_cursor != GetCursor()) 
                SetCursor(m_cursor);
        }
    }
    HCURSOR m_cursor;
};
#endif
于 2014-02-17T20:42:10.440 回答