我做了一个登陆界面,用户名、密码编辑框已经和变量关联,m_strUserName是用户名,m_strPassWord是密码。登陆时的判断函数原型是 CanLogin(char*, char*);
m_dbProcess是数据库访问类的一个对象。if ( m_dbProcess->CanLogin(m_strUserName.GetBuffer(m_strUserName.GetLength()), 
m_strPassWord.GetBuffer(m_strPassWord.GetLength())) == TRUE )如上代码,如果在用户名输入1111, 用afxmessagebox显示m_strUserName  m_strPassWord的值都正确
但是getbuffer之后就错误了,出现内存访问错误,
BOOL CDBProcess::CanLogin(char *strUserName, char *strPassWord)
{
STAFF st[20];
CString sql("select * from TSTAFF"); BOOL bSucc = Select(sql, st, 20); if ( bSucc == TRUE ){
for ( int i = 0; i < 20; i++ ){
trim(st[i].username);
trim(st[i].password);
if ( strcmp(strUserName, st[i].username) == 0 && strcmp(strPassWord, st[i].password) == 0 ){
m_strUserName = strUserName;
return TRUE;
}
}
}
return FALSE;
}
上面函数中,Select函数中有数据库的连接方法, 程序断在了连接函数中这个位置:
 
         // .....
         char sConnectInfo[256];  // 数据库信息
memset(sConnectInfo, 0, sizeof(sConnectInfo));
sprintf(sConnectInfo, "DSN=%s;UID=%s;PWD=%s", sDBName, sDBUID, sDBPW);
BOOL bRtn = FALSE;
try {
bRtn = m_db.OpenEx(sConnectInfo, CDatabase::noOdbcDialog);  这个位置 
         // .....debug过程中显示m_strUserName变量是一个
ATL::CSimpleStringT<char,1>,为啥是1个字符串长度啊??  我的整个工程在建立时,是unicode编码,后来使用属性改成了非unicode,程序就是把变量初始化的地方改了改就
可以编译成功了,如上的问题我怀疑是使用unicode后被改回的后遗症。这种情况大家遇到过吗,该如何解决cstring的getbuffer获取不到字符串? 整个这个登录对话框的类中cstring都不好用。