我用ATL写了一个WebBrowser浏览器,现在遇到廖数据转换问题:
如何将用户的POST数据获取。
//
// IDispatch Methods
//
STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
//_ASSERT(); USES_CONVERSION;
if (!pDispParams)
return E_INVALIDARG; switch (dispidMember)
{
//
// The parameters for this DISPID are as follows:
// [0]: Cancel flag - VT_BYREF|VT_BOOL
// [1]: HTTP headers - VT_BYREF|VT_VARIANT
// [2]: Address of HTTP POST data - VT_BYREF|VT_VARIANT
// [3]: Target frame name - VT_BYREF|VT_VARIANT
// [4]: Option flags - VT_BYREF|VT_VARIANT
// [5]: URL to navigate to - VT_BYREF|VT_VARIANT
// [6]: An object that evaluates to the top-level or frame
// WebBrowser object corresponding to the event.
//
case DISPID_BEFORENAVIGATE2:
//if (pDispParams->rgvarg[0].vt==(VT_BYREF|VT_BOOL)) MessageBox("bool");
//((*pDispParams).rgvarg)[2].pbool=FALSE;
//pDispParams->rgvarg[0].pbool =FALSE;
if (pDispParams->cArgs >= 5 && pDispParams->rgvarg[5].vt == (VT_BYREF|VT_VARIANT))
{
//pDispParams->rgvarg[0].boolVal=FALSE;
//Get URL of Navigate
CComVariant vtURL(*pDispParams->rgvarg[5].pvarVal);
vtURL.ChangeType(VT_BSTR);
//Get PostData Important
CComVariant vtPostData(*pDispParams->rgvarg[2].pparray);
vtPostData.ChangeType(VT_UI1);
//LPVOID lpArrayData;
//::SafeArrayAccessData( pDispParams->rgvarg[2].pvarVal, &lpArrayData );
/*
CComVariant vtPostData2(*vtPostData.pvarVal);
if (vtPostData2.vt !=VT_EMPTY)
{
SAFEARRAY * psa = *(vtPostData2.pparray);
LPSTR lp = NULL;
char buf[1024];
UINT len = SafeArrayGetDim(psa);
long lOffs[3];
lOffs[0] = 0;
lOffs[1] = len;
lOffs[2] = 0; SafeArrayGetElement(*(vtPostData2.pparray),lOffs,buf); vtPostData2.ChangeType(VT_UI1);
SafeArrayAccessData(*(vtPostData2.pparray),(void**)&lp);
}
vtPostData.ChangeType(VT_I1);
*/
CString str;
//str.Format("%c",n);
//str.Format("%s",_T(((*pDispParams).rgvarg)[2].bstrVal));
str=OLE2T(vtPostData.bstrVal);
//if (str.Find("about.htm"))
//m_spWebBrowser->Navigate(vtURL.bstrVal,NULL,NULL,NULL,NULL);
//m_spWebBrowser->Stop();
if (str.GetLength()>0)
{
MessageBox(OLE2T(vtURL.bstrVal));
MessageBox(str);
}
((*pDispParams).rgvarg)[0].boolVal = FALSE;
pDispParams->rgvarg[0].boolVal = FALSE;
}
break;
case DISPID_AMBIENT_DLCONTROL:
{
CComVariant vtResult(static_cast<long>(m_dwDLControl));
*pvarResult = vtResult;
} break; default:
return DISP_E_MEMBERNOTFOUND; } return S_OK;
}
如何将用户的POST数据获取。
//
// IDispatch Methods
//
STDMETHODIMP CAtlBrCon::Invoke(DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS* pDispParams,
VARIANT* pvarResult,
EXCEPINFO* pExcepInfo,
UINT* puArgErr)
{
//_ASSERT(); USES_CONVERSION;
if (!pDispParams)
return E_INVALIDARG; switch (dispidMember)
{
//
// The parameters for this DISPID are as follows:
// [0]: Cancel flag - VT_BYREF|VT_BOOL
// [1]: HTTP headers - VT_BYREF|VT_VARIANT
// [2]: Address of HTTP POST data - VT_BYREF|VT_VARIANT
// [3]: Target frame name - VT_BYREF|VT_VARIANT
// [4]: Option flags - VT_BYREF|VT_VARIANT
// [5]: URL to navigate to - VT_BYREF|VT_VARIANT
// [6]: An object that evaluates to the top-level or frame
// WebBrowser object corresponding to the event.
//
case DISPID_BEFORENAVIGATE2:
//if (pDispParams->rgvarg[0].vt==(VT_BYREF|VT_BOOL)) MessageBox("bool");
//((*pDispParams).rgvarg)[2].pbool=FALSE;
//pDispParams->rgvarg[0].pbool =FALSE;
if (pDispParams->cArgs >= 5 && pDispParams->rgvarg[5].vt == (VT_BYREF|VT_VARIANT))
{
//pDispParams->rgvarg[0].boolVal=FALSE;
//Get URL of Navigate
CComVariant vtURL(*pDispParams->rgvarg[5].pvarVal);
vtURL.ChangeType(VT_BSTR);
//Get PostData Important
CComVariant vtPostData(*pDispParams->rgvarg[2].pparray);
vtPostData.ChangeType(VT_UI1);
//LPVOID lpArrayData;
//::SafeArrayAccessData( pDispParams->rgvarg[2].pvarVal, &lpArrayData );
/*
CComVariant vtPostData2(*vtPostData.pvarVal);
if (vtPostData2.vt !=VT_EMPTY)
{
SAFEARRAY * psa = *(vtPostData2.pparray);
LPSTR lp = NULL;
char buf[1024];
UINT len = SafeArrayGetDim(psa);
long lOffs[3];
lOffs[0] = 0;
lOffs[1] = len;
lOffs[2] = 0; SafeArrayGetElement(*(vtPostData2.pparray),lOffs,buf); vtPostData2.ChangeType(VT_UI1);
SafeArrayAccessData(*(vtPostData2.pparray),(void**)&lp);
}
vtPostData.ChangeType(VT_I1);
*/
CString str;
//str.Format("%c",n);
//str.Format("%s",_T(((*pDispParams).rgvarg)[2].bstrVal));
str=OLE2T(vtPostData.bstrVal);
//if (str.Find("about.htm"))
//m_spWebBrowser->Navigate(vtURL.bstrVal,NULL,NULL,NULL,NULL);
//m_spWebBrowser->Stop();
if (str.GetLength()>0)
{
MessageBox(OLE2T(vtURL.bstrVal));
MessageBox(str);
}
((*pDispParams).rgvarg)[0].boolVal = FALSE;
pDispParams->rgvarg[0].boolVal = FALSE;
}
break;
case DISPID_AMBIENT_DLCONTROL:
{
CComVariant vtResult(static_cast<long>(m_dwDLControl));
*pvarResult = vtResult;
} break; default:
return DISP_E_MEMBERNOTFOUND; } return S_OK;
}
解决方案 »
- 非模态对话框销毁的一点疑问
- 找工作中……每天散100分
- 有没有将窗口放在最顶层,也就是说不管任何程序的窗体(任何程序)都得不到焦点的函数,自己能实现吗。
- 哪位高手能帮我改进我的快速平移BMP图片(大型)的算法?进来看看?万分感谢!
- CString 型的变量 为何用 cfile.write()函数不能写啊???
- 请教打开文件在后面追加
- 这是什么初始化方法?
- ●●cannot open file "mfc42u.lib"???我查找过,我VC中确实没有这个库文件,谁能发个我?在线等,等
- 如何通过设置PROJECT->SETTING项,来使应用程序包含别的目录下的头文件
- 有关Automation & ActiveX script 的很棘手的问题
- 请诸位Windows程序员去看看红旗Linux4.0,谁还敢说Linux不易用!
- 散分!祝大家中秋快乐!!!
char *str;
if (pDispParams->cArgs >= 5 && pDispParams->rgvarg[5].vt == (VT_BYREF|VT_VARIANT))
{
CComVariant varURL(*pDispParams->rgvarg[5].pvarVal);
varURL.ChangeType(VT_BSTR);
str = OLE2A(varURL.bstrVal);
}
for more ,you can see
http://www.vckbase.com/document/viewdoc.asp?id=614