How to post data using TCppWebBrowser in C++Builder (转www.borland.com)
Abstract:This article demonstrates techniques for using the CppWebBrowser component to browse and post data using Navigate and Navigate2 methods. By Adam Vieweger.
I had been tearing my hair out for more than two weeks. I wanted to use the TCppWebBrowser component (distributed with Borland C++Builder starting with BCB 5 Enterprise Edition) to create an app that would browse the Web and allow users to post data to Web pages. I was having a tough time of it because the documentation on TCppWebBrowser is fairly sparse and there aren't many articles out there to guide me.
So I rolled up my sleeves and started working. I hope my discoveries prove useful to you.
Browsing with CppWebBrowser turned out to be fairly simple. There are two methods that provide browsing capabilities: Navigate and Navigate2:
CppWebBrowser1->Navigate("http://www.inprise.com";) Navigate2 is extension of Navigate, but practically it does not matter for us -- in this article we can use both of them interchangeably.
HARDER PROBLEMS Posting data proved to be a tougher nut to crack. Microsoft's component requires data to be passed in a SAFEARRAY structure. The problem is that all Navigate2 parameters are TVariant type. I needed to convert between SAFEARRAY and TVariant.
That's where the Borland Community site came in handy. I found a great tutorial on how to use SAFEARRAYs with C++Builder. For further details please refer to SAFEARRAYs made easier.
The following code demonstrates the results of my research. Navigate requires that the TVariant should be of type VB_ARRAY and that it should point to a SAFEARRAY. The SAFEARRAY should be of element type VT_UI1 (an unsigned int), dimension one, and it should have an element count equal to the number of bytes of data to be posted.
Confused? Take a look at the code and everything should be much clearer: