役立たずかも
template<typename T, typename U>
T co_interface_cast(U from)
{
 T ret;
 HRESULT result;

 result = from->QueryInterface( __uuidof(T), reinterpret_cast<void**>( &ret ) );
 if ( FAILED( result ) ) {
  ret = NULL;
 }
 return ret;
}