//--------------------------------------------------------------------------- void __fastcall XmlDataProvider::GetData(TStringList &MyValues) { String xmlfile = "items.xml"; CoInitialize(NULL); ISAXXMLReader* pRdr = NULL; HRESULT hr = CoCreateInstance( __uuidof(SAXXMLReader), NULL, CLSCTX_ALL, __uuidof(ISAXXMLReader), (void **)&pRdr); if (!FAILED(hr)) { ISAXContentHandler* pContentHandler = new CSaxContentHandlerImp(MyValues); pRdr->putContentHandler(pContentHandler); //SAXErrorHandlerImpl * pEc = new SAXErrorHandlerImpl(); //hr = pRdr->putErrorHandler(pEc); // SAXDTDHandlerImpl * pDc = new SAXDTDHandlerImpl(); // hr = pRdr->putDTDHandler(pDc); if (FAILED((hr = pRdr->parseURL((wchar_t*)(xmlfile.c_str()))))) MyValues.Add("parsing failed"); pRdr->Release(); delete pContentHandler; } else { ShowMessage("Error creating COM object"); } CoUninitialize(); }
bool loadClasses(const std::string &fileName, std::vector<EmoClass> &classes) { const int len = MultiByteToWideChar(CP_UTF8, 0, fileName.c_str(), -1, 0, 0); if (len <= 0) { return false; } wchar_t *buffer = new wchar_t[len]; MultiByteToWideChar(CP_UTF8, 0, fileName.c_str(), -1, buffer, len); std::wstring wfileName(buffer); delete[] buffer; HRESULT hr = CoInitialize(0); if (FAILED(hr)) { return false; } ISAXXMLReader *reader = 0; hr = CoCreateInstance(CLSID_SAXXMLReader60, 0, CLSCTX_INPROC_SERVER, IID_ISAXXMLReader, (LPVOID*) &reader); if (FAILED(hr)) { return false; } ClassesContentHandler *handler = new ClassesContentHandler(classes); ReleaseOnExit releaseReader(*reader); ReleaseOnExit releaseHandler(*handler); hr = reader->putContentHandler(handler); if (FAILED(hr)) { return false; } hr = reader->parseURL(wfileName.c_str()); if (FAILED(hr)) { return false; } return true; }