CString sURL(URL->bstrVal);
int id=sURL.ReverseFind('\\'); //反向查找"\和/"
if(id==-1) sURL.ReverseFind('/');
try
{
if(sURL.Mid(id+1).CompareNoCase("ToDialog"))
throw(0); //不是预定义的URL
if(((PostData->vt) & (VT_VARIANT | VT_BYREF))==0)
throw(0);
VARIANT * v=PostData->pvarVal;
if(((v->vt) & (VT_UI1 | VT_ARRAY))==0)
throw(0);
SAFEARRAY *pArr=v->parray;
CString sData=(LPCSTR)pArr->pvData; //至此,得到传送的数据流
// 数据流的结构
// 变量1=值1&变量2=值2&......变量n=值n
CStringArray arrPart;
while(TRUE) //按照 '&' 进行拆分
{
id=sData.Find('&');
if(id==-1){ arrPart.Add(sData); break; }
arrPart.Add(sData.Left(id));
sData=sData.Mid(id+1);
}
CString sResult;
for(int nPart=0;nPart<arrPart.GetSize();nPart++)
{ //循环处理每个“变量=值”的部分
CString sPart=arrPart.GetAt(nPart); //取出
id=sPart.Find('=');
ASSERT(id!=-1);
CString sName = sPart.Left(id); //变量名
CString sValue= sPart.Mid(id+1); //值
sName = WebStr2Str(sName); //转换Web字符串到标准字符串
sValue= WebStr2Str(sValue);
sResult += sName+" = "+sValue+"<br>";
}
//以下是演示使用DHTML
IHTMLDocument2 *pDoc=(IHTMLDocument2 *)m_explore.GetDocument();
VARIANT *param;
SAFEARRAY *sfArray;
BSTR bstr = sResult.AllocSysString();
sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
if(sfArray && pDoc)
{
if(S_OK == SafeArrayAccessData(sfArray,(LPVOID*) & param))
{
param->vt = VT_BSTR;
param->bstrVal = bstr;
SafeArrayUnaccessData(sfArray);
pDoc->write(sfArray);
}
SysFreeString(bstr);
if (sfArray) SafeArrayDestroy(sfArray);
}
|