Click to See Complete Forum and Search --> : encode Base64 question


wenson
April 7th, 2002, 10:47 PM
Hi everybody
I am new about XML with Visual C++ and I already translation binary file into base64-XML format successful.

This XML data is stored in Database. I download this XML data from server (it is OK), but I don¡¦t how about do it that XML data encode to binary file.
Who can tell me, how about encode base64-XML data to binary file (This base64-XML data is from binary file translation)


Sample code is follow under(binary file -> base64 XML):

CFile myFile;
CFileException ex;
long cc;
VARIANT vp;
BYTE *lpBytes;
if (myFile.Open("C:\\22.ico", CFile::modeRead, NULL) == 0)
return;
cc = myFile.GetLength();
// char *p = new char[cc];
myFile.Read((lpBytes = (BYTE *)malloc(cc * sizeof(BYTE))), cc);
myFile.Close();
SAFEARRAY *psa=SafeArrayCreateVector(VT_UI1, 0 ,cc);
BYTE* pArray=NULL;
SafeArrayAccessData(psa, (void**)&pArray);
::memcpy(pArray, lpBytes, cc);
SafeArrayUnaccessData(psa);
vp.vt = (VT_ARRAY|VT_UI1);
vp.parray = psa;

CString xml;
xml = "<WebServer xmlns:pp='base64-com-tw'></WebServer>";

try {
IXMLDOMDocumentPtr docPtr;
IXMLDOMNodePtr DOMNodePtr;
IXMLDOMNamedNodeMapPtr DOMNamedNodeMapPtr;
IXMLDOMElementPtr ele;
IXMLDOMNodeListPtr NodeListPtr;
//init
TESTHR(CoInitialize(NULL));
TESTHR(docPtr.CreateInstance("msxml2.domdocument"));
// load a document
_bstr_t varXml(xml);
_variant_t varOut((bool)TRUE);
_variant_t varValue;
varOut = docPtr->loadXML(varXml);
if ((bool)varOut == FALSE)
throw(0);
//create node
ele = docPtr->createElement("Delivers");
ele->setAttribute("Command", "MTOCHK");
ele->setAttribute("Parameters", " 0 1");
ele->setAttribute("Project", "E3156");
docPtr->documentElement->appendChild(ele);

//create other node
IXMLDOMNodePtr doc;
doc = docPtr->documentElement->selectSingleNode("//Delivers");
ele = docPtr->createElement("Files");
ele->put_dataType(BSTR(L"bin.base64"));
ele->put_nodeTypedValue(vp);
ele->setAttribute("name", "22.ico¡¨);
doc->appendChild(ele);
docPtr->save(COleVariant("c:\\base64.xml"));
MessageBox(_bstr_t(docPtr->xml), _T("New Document"), MB_OK);
} catch(...)
{
MessageBox(_T("Exception occurred"), _T("Error"), MB_OK);
}
CoUninitialize();