Ejemplo n.º 1
0
//---------------------------------------------------------------------------
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();

}
Ejemplo n.º 2
0
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;
}