|
在C++Builder中如何用“TCppWebBrowser”POST数据(2) 晕了?好吧,来看看代码,所有的概念都将会更加清晰起来: // *方法 1* TVariant vtEmpty; TVariant vtPostDataArray; char *str = "action=LogMeIn&username=MyName&passWord=MyPass"; SAFEARRAY FAR *psa = NULL; SAFEARRAYBOUND sabound[48]; sabound[0].cElements = strlen(str); sabound[0].lLbound = 0; psa = SafeArrayCreate(VT_UI1, 1, sabound); for(unsigned int n = 0; n < strlen(str); n++){ SafeArrayPutElement(psa, (long*)0, (void*)str[n]); } vtEmpty.vt = VT_EMPTY; vtPostDataArray.vt = VT_ARRAY; vtPostDataArray.SetSAFEARRAY(psa); // or vtPostDataArray=psa; TVariant vAddress = {"http://my.server/test/postresults.asp"}; CppWebBrowser1->Navigate2(&vAddress, &vtEmpty, &vtEmpty, &vtPostDataArray, &vtEmpty); SafeArrayDestroy(psa); // *方法 2* TVariant vtEmpty; char *str = "action=LogMeIn&username=MyName&password=MyPass"; TSafeArrayDim1 dim(strlen(str)); TSafeArrayUInt1 uint_array(dim); for(unsigned int n = 0; n < strlen(str); n++){ uint_array[n]=str[n]; } SAFEARRAY* sa = uint_array.Detach(); SafeArrayCopy(sa, &uint_array); vtEmpty.vt = VT_EMPTY; TVariant vAddress = {"http://my.server/test/postresults.asp"}; CppWebBrowser1->Navigate2(&vAddress, &vtEmpty, &vtEmpty, &sa, &vtEmpty); SafeArrayDestroy(sa); 方法 1 和方法 2都是非常完美的代码,但是它们都只有一个缺点 -- 它们不能工作! 全都正确地传递了数据,但是“Navigate” 不将数据post给指定的URL。 深度挖掘 我回到MSDN再研究WebBrowser.这时我发现两篇对我非常有帮助的文章: Q167658和Q165800. 手头上有了那些信息,我终于成功了! 这个是对我的代码的改进. 这个代码演示了如何利用一个CppWebBrowser组件浏览和post“HTTP”数据.你可以进一步修改这些代码以适应你的要求。 void WebPostData(TCppWebBrowser *CppWebBrowser, String sURL, String sPostData) {
|