各种坑:记第一次VC开发


获取编辑框中的数字

mVideoServerPort是一个CEdit类型控件,问题是在vs的自动提示中只能看到GetWindowTextW这个方法,而这个方法接收2个参数:

  • LPTSTR
  • 最大长度

然后我这样:

1
2
LPTSTR portStr;
mVideoServerPort.GetWindowTextW(portStr, 6);

VS提示portStr未初始化。以我的浅见,这是个指向char的指针啊,那这样:

1
2
3
4
5
// "char *" 类型的值不能用于初始化 "LPTSTR" 类型的实体
LPTSTR portStr = new char[6]; 
// 下面2个貌似ok
LPTSTR portStr = _TCHAR[6];
LPTSTR portStr = TCHAR[6];

我选用了第三种,也就是LPTSTR portStr = TCHAR[6]

接下来字符串转换成数字,我在控件中输入54321,它却始终只能转换第一个字符,也就是5。但是如果我直接把portStr的值写死成“54321”,转换后的port却是对的。这尼玛什么情况??

1
int port = atoi((char *) portStr);

Google了一下,发现了这个 atoi only returning first digit of char* parameter。这是个什么情况,看不懂了啊!!

然后就在一个论坛里面看到类似如下的代码,它调用了GetWindowText。抱着试试看的心态,竟然能通过编译,结果还对了。

1
2
3
4
5
CString portStr ;
mVideoServerPort.GetWindowText(portStr);

USES_CONVERSION;
int port = atoi((char *) W2A(portStr));

这个,VS的智能提示是个神马情况???


Microsoft 符号服务器无限读条

调试的时候,每次启动应用程序,都要出现下面窗口,然后就是没完没了的读条

vs-symbol-loading-dialog

咱也不懂啥是个符号服务器,直接忽略之,该勾的勾,该删的删,该清的清。

vs-options-symbol