以下代码在ASP中调用时,如果不断刷新页面,会出现下列错误:
Active Server Pages 错误 'ASP 0115'
意外错误
/index.asp
外部对象中发生一个可捕捉的错误(C0000005)。脚本无法继续执行。 STDMETHODIMP Cuser::get_Create(BSTR User,BSTR Group, IDispatch** pVal)
{
// TODO: 在此添加实现代码errcode=1;
IADsContainer *pCont = NULL;
CComBSTR dstring;
if((dstring=GetDomainString())==NULL) return S_OK; //此函数见下面
CComBSTR domainstr("LDAP://OU=");
domainstr.AppendBSTR(Group);
domainstr.Append(",");
domainstr.Append(dstring);
HRESULT hr;
hr = ADsOpenObject(domainstr,
luser,//管理员
lpass,//管理员密码
ADS_SECURE_AUTHENTICATION|ADS_PROMPT_CREDENTIALS,
IID_IADsContainer,
(void**) &pCont );
if(!SUCCEEDED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf; //Estring是一个CComBSTR
return S_OK;}
IADs *pADs=NULL;
IDispatch *pVall=NULL;
CComBSTR temp2("CN=");
temp2.AppendBSTR(User);
hr = pCont->Create(L"user",temp2, &pVall);
pCont->Release();
if(!SUCCEEDED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf;
return S_OK;
}
hr = pVall->QueryInterface(IID_IADs, (void**) &pADs );
pVall->Release();
if ( !SUCCEEDED(hr) ) {
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf;
return S_OK;}
CComVariant temp3(User);
hr=pADs->Put(L"samAccountName",temp3);
hr=pADs->SetInfo(); // Commit
if ( !SUCCEEDED(hr) ) {
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf;
return S_OK;
}
pADs->QueryInterface(IID_IADsUser,(void**)pVal);
pADs->Release();
errcode=0;
return S_OK;
}
CComBSTR Cuser::GetDomainString(void)
{
IADs* des=NULL;
HRESULT hr;
hr = ADsGetObject(L"LDAP://rootDSE",IID_IADs,(void**)&des);
if(!SUCCEEDED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf;;
return NULL;
}
VARIANT dnc;
des->Get(L"defaultNamingContext",&dnc);
des->Release();
CComBSTR bstr;
bstr.m_str=dnc.bstrVal;
return bstr;
}
Active Server Pages 错误 'ASP 0115'
意外错误
/index.asp
外部对象中发生一个可捕捉的错误(C0000005)。脚本无法继续执行。 STDMETHODIMP Cuser::get_Create(BSTR User,BSTR Group, IDispatch** pVal)
{
// TODO: 在此添加实现代码errcode=1;
IADsContainer *pCont = NULL;
CComBSTR dstring;
if((dstring=GetDomainString())==NULL) return S_OK; //此函数见下面
CComBSTR domainstr("LDAP://OU=");
domainstr.AppendBSTR(Group);
domainstr.Append(",");
domainstr.Append(dstring);
HRESULT hr;
hr = ADsOpenObject(domainstr,
luser,//管理员
lpass,//管理员密码
ADS_SECURE_AUTHENTICATION|ADS_PROMPT_CREDENTIALS,
IID_IADsContainer,
(void**) &pCont );
if(!SUCCEEDED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf; //Estring是一个CComBSTR
return S_OK;}
IADs *pADs=NULL;
IDispatch *pVall=NULL;
CComBSTR temp2("CN=");
temp2.AppendBSTR(User);
hr = pCont->Create(L"user",temp2, &pVall);
pCont->Release();
if(!SUCCEEDED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf;
return S_OK;
}
hr = pVall->QueryInterface(IID_IADs, (void**) &pADs );
pVall->Release();
if ( !SUCCEEDED(hr) ) {
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf;
return S_OK;}
CComVariant temp3(User);
hr=pADs->Put(L"samAccountName",temp3);
hr=pADs->SetInfo(); // Commit
if ( !SUCCEEDED(hr) ) {
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf;
return S_OK;
}
pADs->QueryInterface(IID_IADsUser,(void**)pVal);
pADs->Release();
errcode=0;
return S_OK;
}
CComBSTR Cuser::GetDomainString(void)
{
IADs* des=NULL;
HRESULT hr;
hr = ADsGetObject(L"LDAP://rootDSE",IID_IADs,(void**)&des);
if(!SUCCEEDED(hr))
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
Estring=(LPCTSTR)lpMsgBuf;;
return NULL;
}
VARIANT dnc;
des->Get(L"defaultNamingContext",&dnc);
des->Release();
CComBSTR bstr;
bstr.m_str=dnc.bstrVal;
return bstr;
}
解决方案 »
- 如何在mfc对话框中如何添加栈类,求教???
- **********************周末封贴,老师说封贴标题一定要长******************************************
- DC缓存,除了BitBlt还有别的方法得到吗?
- 菜鸟请教,照书打代码出现了一个错误,不理解。
- 不用MFC的TRACE, 怎样把debug message output to debug windows?
- UDP通过完成端口发送数据包的问题
- 请教高手:如何实现多文档程序中某个子窗口的自动active,也就是自动使多个子窗口中的某个自动成激活状态
- 请问各位高手!
- ADO连接SQLserver数据库的问题,急急急!!!等等等!!!
- VC6.0下编译遇到的问题!
- 这个错误怎么解决?
- 如何使在初始化用代码设置CRichEditCtrl控件回车自动换行?不要告诉用属性对框设置ES_WANTRETURN,因为我是用组件加进去的,属性对话框中
现在一遇到ASP 0115,我的inetinfo.exe就宕了
lpMsgBuf没有释放掉。
Estring=(LPCTSTR)lpMsgBuf;
在第三次刷新页面时就出问题,改为:
Estring=“xxxxxxxxxxxx";
就会到第5、6次才会出问题
肯定有其他问题
不敢说问题出在这里,但这至少是个规范。
再:
你最后用pADs->QueryInterface(IID_IADsUser,(void**)pVal);返回了指针,那么就要保证调用者(客户端程序)传递进来的参数*pVal必须是NULL再:为什么不用try{}catch{}捕获错误位置呢,配合日志输出,很容易就应该能判断出问题发生在哪里呀。
觉得注意一下HRESULT ADsOpenObject(
LPWSTR lpszPathName,
LPWSTR lpszUserName,
LPWSTR lpszPassword,
DWORD dwReserved,
REFIID riid,
VOID** ppObject
);
函数里LPWSTR类型是否可以直接传入CComBSTR,没有主动转换,编译器能够正确做转换吗?
那次是第一次做,也没研究清楚。
再有就是lpMsgBuf,只是申明了一个指针,并没有明确分配内存就作为函数实参,??
看不到全部代码,管窥