《WINDOWS游戏编程大师技巧》一书源码有问题??帮忙看看

wafx5545592 2010-08-13 04:05:39
先看大师的代码

if (!(hwnd = CreateWindowEx(NULL, // extended style
WINDOW_CLASS_NAME, // class
"your basic window", // title
WS_POPUP | WS_VISIBLE,
0,0, // initial x,y
SCREEN_WIDTH,SCREEN_HEIGHT, // initial width, height
NULL, // handle to parent
NULL, // handle to menu
hinstance,// instance of this application
NULL))) // extra creation parms

注意看我给了红色的部分

这个地方我的是VS08编译器会提示(两个错误,我就直接再参数那里写上数字了哈)error C2664: “CreateWindowExW”: 不能将参数 2 (3)从“const char [10]”转换为“LPCWSTR”
我改了呢???

(LPCWSTR)WINDOW_CLASS_NAME, //class
(LPCWSTR)"your basic window",//title

我用强制转换了之后
就会出现什么参数不能为左值的错误(就在下面我复制出来了,是再VC上面的编译错误..)
另外还有就是刚才我竟然再次编译竟然没有错误了.....但是编译通过了,运行又有错误

“Game.exe”: 已加载“C:\WINDOWS\system32\wldap32.dll”
“Game.exe”: 已加载“C:\Program Files\SogouInput\Plugin\SgImeWord.dll”,未使用调试信息生成二进制文件。
线程 'Win32 线程' (0xb2c) 已退出,返回值为 0 (0x0)。

另外还有就是如果再VC6上面编译,我发现刚好跟VS08相反
如果有强制转换(LPCWSTR)就会出现错误....(看来可能是大师的代码要再VS上面编译)但是....
还有错误
C:\Program Files\Microsoft Visual Studio\MyProjects\Test\Test.cpp(93) : warning C4800: 'struct HWND__ *' : forcing value to bool 'true' or 'false' (performance warning)
C:\Program Files\Microsoft Visual Studio\MyProjects\Test\Test.cpp(93) : error C2106: '=' : left operand must be l-value
这两个错误
这两个错误同时也是VS上面用了强制转换后出现的错误.......

好吧,大家可能没听懂我,我总结一下

再VS下我要用强制类型转换,而VC不用强制类型转换,但是会产生同样的错误
C:\Program Files\Microsoft Visual Studio\MyProjects\Test\Test.cpp(93) : warning C4800: 'struct HWND__ *' : forcing value to bool 'true' or 'false' (performance warning)
C:\Program Files\Microsoft Visual Studio\MyProjects\Test\Test.cpp(93) : error C2106: '=' : left operand must be l-value

而VS不知道为什么突然又变得可以编译通过了,但是又无法正常运行....
...全文
106 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2010-08-14
  • 打赏
  • 举报
回复
网上有电子版。
即使这个问题你解决了:但如果不知道为什么,那也是没有太大帮助的!
「已注销」 2010-08-14
  • 打赏
  • 举报
回复
楼主在学这本书之前,还是先看看《Windows程序设计》上册前三章吧。
xiaopoy 2010-08-13
  • 打赏
  • 举报
回复
建议学windows,默认的都写宽字节的版本。需要窄字节时,用字符串转换成宽字节再调用原来的 包装来实现。需要使用函数时,用
#ifndef UNICODE
#define ABC ABCascii
#else
#define ABC ABCunicode
#endif
jackyjkchen 2010-08-13
  • 打赏
  • 举报
回复
对了,_T要包含mfc的库了,楼主用TEXT()
jackyjkchen 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]
_Text("your basic window"), 我记得好像是应该这样使用。
[/Quote]
TEXT(),__TEXT()或_T()
jackyjkchen 2010-08-13
  • 打赏
  • 举报
回复
或者,你在工程属性里吧字符改成“多字节”,VC6的代码基本就能通过了

但我建议养成Unicode的使用习惯,从动不动强转这个行为上,看出楼主对于内存布局、字符编码等基本概念还有待加强
pengzhixi 2010-08-13
  • 打赏
  • 举报
回复
_Text("your basic window"), 我记得好像是应该这样使用。
jackyjkchen 2010-08-13
  • 打赏
  • 举报
回复
VS2008是默认Unicode编码

这本书我们看过,但猜想是VC6的环境,ANSI编码

单字的字长都不一样,强转是不对的

你应该在所有明文字符串外罩上_T()

如_T("hello")

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧