封装了一个类库,类库中调用一个webservice的atl代理类,程序退出时,会出现内存不能为读错误,大家帮忙!谢谢
大概思路是这样的:
我们的用户鉴权功能是由C#写的一个Web Service提供,为了方便VC的客户端使用,打算将对WebService的引用封装在一个类库中。
但是偶用vc写的一个自测程序去调用封装后的类库,在退出时就会出现“内存不能为读”的错误提示;
偶试了两种情况:
1、如果直接在自测程序中添加Web引用,然后直接调用自动生成的WebService的ATL代理类,退出时就不会出现这样的错误;
2、在类库中调用这个ATL代理类时,如果输出参数传递一个NULL,退出时也不会出现这个错误。
所以,初步确定应该是输出参数的释放有问题,但偶试了好久,也还是有“内存不能为读”的错误提示,不知道错在哪里了?大家帮忙看看,谢谢
封装的类库中的部分代码如下:
其中,m_pWS是atl代理类指针,在类库构造时创建,析构时释放;
// ***************************************************************
// 函数名称:CheckUser
// 功能描述:验证用户登录
// 访问的表:无
// 修改的表:无
// 输入参数:const CString& sUserid - 用户名称
// const CString& sUserpwd - 用户密码
// BYTE nSysfuncid - 是否能登录该子系统的系统功能编号
// 输出参数:bool* bRtn - 执行是否成功
// 返回值:CString - 输出信息
// 其它说明:无
// ***************************************************************
CString CAuthority::CheckUser(const CString& sUserid, const CString& sUserpwd , BYTE nSysfuncid, bool* bRtn)
{
HRESULT hr = S_OK;
CComBSTR bstrUserid = sUserid;
CComBSTR bstrUserpwd = sUserpwd;
CComBSTR bstrMsg = NULL;//static_cast< LPCOLESTR>(NULL);
bstrMsg.Empty();
hr = m_pWS->CheckUser(bstrUserid, bstrUserpwd, nSysfuncid, bRtn, &bstrMsg);
// 获取返回值
CString sMsg(bstrMsg == NULL ? L"" : bstrMsg);
return sMsg;
}