У меня проблемы с 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!
Что я делаю не так??
Когда вы объявляете LPPOINT
, вы объявляете указатель на объект POINT
. Поэтому, когда вы пишете
LPPOINT cursorPos = 0;
Вы создаете указатель под названием cursorPos
и устанавливаете его в NULL
. Вызов
GetCursorPos(cursorPos);
то сбой, поскольку GetCursorPos
ожидает, что вы 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));
Надеюсь это поможет!