MSXMLで任意のXMLスキーマファイルを用いて検証する方法

MSXML2::CLSID_XMLSchemaCache40をクリエイトしてadd()でXMLスキーマファイルを読み込み、MSXML2::CLSID_DOMDocument40にputref_schemas()で関連付ける。
そして、MSXML2::CLSID_DOMDocument40::load()なりvalidate()で検証可能。エラー発生場所を調べるにはload()で検証するのがよさげ。validate()が返すMSXML2::IXMLDOMParseErrorPtrには詳細な情報が乗ってこない。

IXMLDOMDocument2Ptr doc; 
doc.CreateInstance(MSXML2::CLSID_DOMDocument40); 
doc->async = VARIANT_FALSE ;

IXMLDOMSchemaCollection2Ptr dtd ;
dtd.CreateInstance( MSXML2::CLSID_XMLSchemaCache40 ) ;

// 任意のXMLスキーマファイルを指定。第一パラメタは名前空間
dtd->add( "" , "test.xsd" ) ;

// 関連付け
doc->putref_schemas( variant_t( (IUnknown *)dtd )) ;

doc->load("test.xml"); 

putref_schemas( variant_t( dtd ) ) とやっていてはまる。putref_schemas( variant_t((IUnknown *)dtd ))のように(IUnknown *)へのキャストが必要らしい。スマートポインタだからだろうか。