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が付いているとパースエラーになるのが落とし穴。