首先模块的有关CMsg定义部分
class AFX_EXT_CLASS CMsg
{
... // 无关内容省略
public:
Cstring m_strName;
Cstring m_strPassword;
... // 无关内容省略
}然后在应用程序里的登录界面这样使用(这是个所有程序员都用得普通登录界面)
void CLoginDlg::OnOK()
{
UpdateData();
CMsg msg;
msg.m_strName = m_txtName; // m_txtName是CLoginDlg的成员变量
msg.m_strPassword = m_txtPassword; // m_txtName是CLoginDlg的成员变量
... // 无关内容省略
}编译通过(window server 2000sp3/visual c++6.0 sp3),然而在运行时出现Debug assertion Failed警告框!经调试错误出现在
msg.m_strName = m_txtName; // m_txtName是CLoginDlg的成员变量
这一行.继续跟踪,发现
void CString::Release()
{
if (GetData() != _afxDataNil)
{
ASSERT(GetData()->nRefs != 0);
if (InterlockedDecrement(&GetData()->nRefs) <= 0)
FreeData(GetData());
Init();
}
}
警告框就是上面
ASSERT(GetData()->nRefs != 0);
引起的百思不得其解,nRefs怎么会为0,不可思议!
望不吝教诲
class AFX_EXT_CLASS CMsg
{
... // 无关内容省略
public:
Cstring m_strName;
Cstring m_strPassword;
... // 无关内容省略
}然后在应用程序里的登录界面这样使用(这是个所有程序员都用得普通登录界面)
void CLoginDlg::OnOK()
{
UpdateData();
CMsg msg;
msg.m_strName = m_txtName; // m_txtName是CLoginDlg的成员变量
msg.m_strPassword = m_txtPassword; // m_txtName是CLoginDlg的成员变量
... // 无关内容省略
}编译通过(window server 2000sp3/visual c++6.0 sp3),然而在运行时出现Debug assertion Failed警告框!经调试错误出现在
msg.m_strName = m_txtName; // m_txtName是CLoginDlg的成员变量
这一行.继续跟踪,发现
void CString::Release()
{
if (GetData() != _afxDataNil)
{
ASSERT(GetData()->nRefs != 0);
if (InterlockedDecrement(&GetData()->nRefs) <= 0)
FreeData(GetData());
Init();
}
}
警告框就是上面
ASSERT(GetData()->nRefs != 0);
引起的百思不得其解,nRefs怎么会为0,不可思议!
望不吝教诲
解决方案 »
- 求助!DLL内不能使用主进程的CMutex?
- 如何实现两个对话框应用程序通信?
- 把StdAfx.h/cpp删除再添加进来,预编译就不行了
- 如何设置Tree控件中的初始目录
- 请问 ~~~~如何检索系统中的文件名
- OnKeyPress(object sender, KeyPressEventArgs e)方法如何使用。在线等!!!
- 在dlg中想调用View中的一个函数,怎么编译通不过阿?
- 新手编程,很急,请高人支招
- tcp 发送端 out-of-order
- 如何得到所有的拨号连接的名字和各项属性?
- 明天就是新年,大家都有什么样的打算呀--在新的一年里!
- Access数据库,存图片路径带来的问题??
CMsg是导出类,当然他的所有共有函数以及变量都是导出的,
建议将CString改为char* 试试
也就是说在模块之间传递指针可能会好些。
CString效率比较低。连微软自己都这么说。