因此,我一直试图在游戏引擎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。
答案 0 :(得分: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