c++.stlsoft - [XMLSTL] Status update
- Matthew (67/67) Aug 12 2006 I know this project seems like total vapourware, but there have been som...
- Cesar Rabak (4/6) Aug 13 2006 Mathew, it is 'dryiceware': you see some fumes but in core there is
I know this project seems like total vapourware, but there have been some relevant movements recently. Specifically: 1. The next STLSoft 1.9.1 beta will include the new comstl components: bstr, variant and ole_object. bstr is a thin wrapper for BSTR, variant is a thin wrapper for VARIANT. ole_object is scripting driver, that allows you to drive an automation server's scripting interface from C++. A sample from one of the test drivers is included below. The current version of XMLSTL relied on Synesis Software components (BStr and Variant), which brought DLLs into the picture. Getting rid of all that makes a distributable form now much more straightforward. 2. My next book (after Extended STL; http://extendedstl.com/) is going to be about how to make C++ facades and libraries play nice. XMLSTL is going to be one of the cases studies. So I plan to strip it back to nothing and do a complete rewrite, and documenting it as I go. I plan to release it in an incremental fashion during that process, both in order to solicit useful feedback, and to trial the principles that'll be espoused in the new book. This process should start in September, I hope. (There will also be some other case studies carried out, probably including a DbSTL wrapper library for SQLite3.) If anyone wants to volunteer for any of these, just post a note or drop me a line (via http://imperfectcplusplus.com/) and I'll get in touch when the work starts. Cheers Matthew LPDISPATCH pdisp; HRESULT hr = comstl::co_create_instance(L"openrj.com.Database", &pdisp); // HRESULT hr = comstl::co_create_instance(L"{75A04F35-6389-4F9C-9BCA-6FAFFC818BA3}", &pdisp); if(FAILED(hr)) { ::fprintf(stderr, "Failed: %s\n", winstl::error_desc(hr).c_str()); } else { using comstl::bstr; using comstl::ole_object; ole_object database(pdisp, false); ole_object DatabaseFlags = ole_object::create(L"openrj.com.DatabaseFlags", comstl::coercion_level::nonDestructiveTruncation); LPCOLESTR fileName = L"H:\\freelibs\\openrj\\current\\samples\\pets\\pets.orj"; long flags = DatabaseFlags.get_property<long>(L"ElideBlankRecords"); database.invoke_method_v(L"OpenFile", fileName, flags); stlsoft::ref_ptr<IUnknown> _Enum = database.get_property(of_type<stlsoft::ref_ptr<IUnknown> >(), DISPID_NEWENUM); bstr DocString = database.get_property<bstr>(L"DocString"); bstr File = database.get_property<bstr>(L"File"); long NumFields = database.get_property<long>(L"NumFields"); long NumRecords = database.get_property<long>(L"Count"); { for(long i = 0; i < NumRecords; ++i) { ole_object record = database[i]; long Count = record.get_property<long>(L"Count"); bstr Comment = record.get_property<bstr>(L"Comment"); { for(long j = 0; j < Count; ++j) { ole_object field = record[j]; bstr Name = field.get_property<bstr>(L"Name"); bstr Value = field.get_property<bstr>(L"Value"); }} }} database.invoke_method_v(L"Close"); }
Aug 12 2006
Matthew escreveu:I know this project seems like total vapourware, but there have been some relevant movements recently. Specifically:Mathew, it is 'dryiceware': you see some fumes but in core there is substance!! Keep going with this nice work :-)
Aug 13 2006