我遇到了GetCursorPos的问题。我使用directx绘制光标所在的正方形,但我的代码不起作用,我不知道为什么......
LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
square->setPosition(D3DXVECTOR2(40.0f,60.0f)); // as a test: works fine...
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
我也试过这个:
LPPOINT cursorPos = 0;
GetCursorPos(cursorPos);
float posX = cursorPos->x; // no crash...
float posY = cursorPos->y; // no crash...
std::cout << posX << posY <<std::endl; // CRASH!
我做错了什么?
答案 0 :(得分:6)
当您声明LPPOINT
时,您将声明指向POINT
对象的指针。因此,当你写
LPPOINT cursorPos = 0;
您正在创建一个名为cursorPos
的指针,并将其设置为NULL
。电话
GetCursorPos(cursorPos);
然后失败,因为GetCursorPos
希望您提供指向要填写信息的POINT
的指针,并且您提供了NULL
指针。因此,当你写
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
您在尝试阅读NULL
和x
时正在阅读y
指针。这会导致未定义的行为,这是一个崩溃。在另一种情况下,您还会获得未定义的行为,而且它恰好不会崩溃。
要解决此问题,请尝试声明一个实际的POINT
对象,如下所示:
POINT cursorPos;
然后调用
GetCursorPos(&cursorPos);
然后将位置读为
square->setPosition(D3DXVECTOR2(cursorPos.x, cursorPos.y));
希望这有帮助!