MSXMLで文字列をインポートする方法
loadXMLを使うと encoding が期待通り処理されない。
以下のようにする。
VARIANT var; { SAFEARRAYBOUND rgb={strlen(xml),0}; //末尾にNULL文字つけちゃだめ SAFEARRAY* psa = SafeArrayCreate(VT_UI1,1, &rgb); if(!psa){ assert(false); return false; } char* buf; SafeArrayAccessData(psa,(void**)&buf); // 作成したSAFEARRAYのポインタ取得及びロック memcpy(buf,xml,strlen(xml)); // 末尾のNULL文字分のバッファは無い! SafeArrayUnaccessData(psa); // アンロック var.vt=VT_ARRAY|VT_UI1; var.parray=psa; } bool ret=manifest->load(var); ::SafeArrayDestroy(var.parray); if(!ret){ ::OutputDebugString(manifest->GetparseError()->Getreason()); ::OutputDebugString(manifest->GetparseError()->GetsrcText()); return false; }
末尾にNULLが付いているとパースエラーになるのが落とし穴。