我做了一个登陆界面,用户名、密码编辑框已经和变量关联,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都不好用。
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都不好用。
解决方案 »
- 请教关于软件方式实现串口重启的问题
- Win7 64bit下使用SendInput()返回错误信息“拒绝访问”
- 对话框中加滚动条的问题
- 超简单的问题,不到5行代码!超难的问题,问了N人没人知道为什么?
- 小问题,我在使用CInternetSession::OpenURL()时,怎么可以不从本地机缓存里读取数据,up有分
- 求救??
- TC++3能编译为什么VC6不性????
- GetItemRect(hItem, &rText, TRUE);为什么这个ctreectrl的函数不能成功执行?
- 简单的多文档界面问题
- [求助]VC2008下编译的程序到其它机器上无法连接数据库
- 如何实现坐标图局部缩放和左右平移?
- 请教,动态创建的状态信息栏,如何添加双击响应事件
m_strPassWord.GetBuffer(m_strPassWord.GetLength())) == TRUE )改为以下试试:
if ( m_dbProcess->CanLogin(m_strUserName.GetBuffer(),m_strPassWord.GetBuffer()) == TRUE )
{
。//你的代码
}//endif
m_strUserName.ReleaseBuffer();
m_strPassWord.ReleaseBuffer();