C++ GetCursorPos的问题

C++ GetCursorPos的问题,c++,windows,winapi,directx,C++,Windows,Winapi,Directx,我的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-

我的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 cursorPos=0;
GetCursorPos(cursorPos);
float posX=cursorPos->x;//没有撞车。。。
float posY=cursorPos->y;//没有撞车。。。

std::cout当您声明一个
LPPOINT
时,您正在声明一个指向
对象的指针。所以你写的时候,

LPPOINT cursorPos = 0;
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
您正在创建一个名为
cursorPos
的指针,并将其设置为
NULL
。电话

GetCursorPos(cursorPos);
然后失败,因为
GetCursorPos
希望您提供一个指向要用信息填充的
点的指针,并且您提供了一个
NULL
指针。因此,当你写作时

LPPOINT cursorPos = 0;
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
在尝试读取
x
y
时,您正在读取
NULL
指针。这会导致未定义的行为,这里是崩溃。在另一种情况下,您也得到了未定义的行为,它只是碰巧没有崩溃

要解决此问题,请尝试声明实际的
对象,如下所示:

POINT cursorPos;
然后打电话

GetCursorPos(&cursorPos);
然后读取位置为

square->setPosition(D3DXVECTOR2(cursorPos.x, cursorPos.y));

希望这有帮助

当您声明
LPPOINT
时,您是在声明指向
对象的指针。所以你写的时候,

LPPOINT cursorPos = 0;
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
您正在创建一个名为
cursorPos
的指针,并将其设置为
NULL
。电话

GetCursorPos(cursorPos);
然后失败,因为
GetCursorPos
希望您提供一个指向要用信息填充的
点的指针,并且您提供了一个
NULL
指针。因此,当你写作时

LPPOINT cursorPos = 0;
square->setPosition(D3DXVECTOR2(cursorPos->x, cursorPos->y)); // -> crash
在尝试读取
x
y
时,您正在读取
NULL
指针。这会导致未定义的行为,这里是崩溃。在另一种情况下,您也得到了未定义的行为,它只是碰巧没有崩溃

要解决此问题,请尝试声明实际的
对象,如下所示:

POINT cursorPos;
然后打电话

GetCursorPos(&cursorPos);
然后读取位置为

square->setPosition(D3DXVECTOR2(cursorPos.x, cursorPos.y));

希望这有帮助

哦,好的。我以为GetCursorPos会声明该对象,因为我在教程中发现它是这样的。。。现在看起来很愚蠢!非常感谢@TCN27,哎哟,有很多教程的代码都是错误的。知道大量的C++首先会有很大的帮助。哦,好的。我以为GetCursorPos会声明该对象,因为我在教程中发现它是这样的。。。现在看起来很愚蠢!非常感谢@TCN27,哎哟,有很多教程的代码都是错误的。知道相当数量的C++首先是很有意义的。