loadXMLを使うと encoding が期待通り処理されない。
以下のようにする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
VARIANT var; { SAFEARRAYBOUND rgb={strlen(xml),<span class="synConstant">0</span>}; <span class="synComment">//末尾にNULL文字つけちゃだめ</span> SAFEARRAY* psa = SafeArrayCreate(VT_UI1,<span class="synConstant">1</span>, &rgb); <span class="synStatement">if</span>(!psa){ assert(<span class="synConstant">false</span>); <span class="synStatement">return</span> <span class="synConstant">false</span>; } <span class="synType">char</span>* buf; SafeArrayAccessData(psa,(<span class="synType">void</span>**)&buf); <span class="synComment">// 作成したSAFEARRAYのポインタ取得及びロック</span> memcpy(buf,xml,strlen(xml)); <span class="synComment">// 末尾のNULL文字分のバッファは無い!</span> SafeArrayUnaccessData(psa); <span class="synComment">// アンロック</span> var.vt=VT_ARRAY|VT_UI1; var.parray=psa; } <span class="synType">bool</span> ret=manifest->load(var); ::SafeArrayDestroy(var.parray); <span class="synStatement">if</span>(!ret){ ::OutputDebugString(manifest->GetparseError()->Getreason()); ::OutputDebugString(manifest->GetparseError()->GetsrcText()); <span class="synStatement">return</span> <span class="synConstant">false</span>; } |
末尾にNULLが付いているとパースエラーになるのが落とし穴。