使用内置 easyx 的 devc++ 移植村长代码:通过程序设置鼠标的样式 解决 [Error] cast from 'HCURSOR {aka HICON__*}' to 'long int' loses precision [-fpermissive] 精度丢失问题

慢羊羊村长的代码链接 通过程序设置鼠标的样式 - CodeBus

直接复制粘贴编译会失败。

解决方案:

1.按编译器提示,需要把 void main 的 void 改成 int

2.然后还会提示:[Error] cast from 'HCURSOR {aka HICON__*}' to 'long int' loses precision [-fpermissive]

翻译过来是:从 HCURSOR 到 long int 类型会丢失精度。

此时把 SetClassLongPtr(hwnd, GCLP_HCURSOR, (long)hcur);中的 long 改成 long long

然后编译运行,成功。鼠标在黑窗口里面时变成十字样式。

 原因:由于不同编译器规定 long 变量所占字节位数不同。在往 devc++移植时,可能同样需要 8 个字节,devc++ 里需要使用 long long, 而 VS 只需要 long.

这也就是 32 位程序可以在 64 位机器上运行,而 64 位程序不能在 32 位机器上运行的原因——因为数据多几个不用的 bit 所代表的数值不变,但是少了几个 bit 就会影响实际代表的数值。

结论:

1. 村长用 Visual C++ 6.0~2022 写的代码,这类代码移植需要把 void main 改成 int main, 如果数据格式转换报错,尽量转成较大字节的格式,如 long 变成 long long, float 变成 double

2. 如果代码内有 win32GUI 内容,项目属性需要重新设置结合另一篇文案 使用内置 easyx 的 devc++ 移植村长代码:窗口技巧:利用窗体句柄实现圆形窗口 为例,解决 WinGUI 函数报错"undefined reference to "