|  | // | 
|  | // Copyright 2014 The ANGLE Project Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  | // | 
|  |  | 
|  | // com_utils.h: Utility functions for working with COM objects | 
|  |  | 
|  | #ifndef UTIL_COM_UTILS_H | 
|  | #define UTIL_COM_UTILS_H | 
|  |  | 
|  | template <typename outType> | 
|  | inline outType *DynamicCastComObject(IUnknown *object) | 
|  | { | 
|  | outType *outObject = nullptr; | 
|  | HRESULT result = | 
|  | object->QueryInterface(__uuidof(outType), reinterpret_cast<void **>(&outObject)); | 
|  | if (SUCCEEDED(result)) | 
|  | { | 
|  | return outObject; | 
|  | } | 
|  | else | 
|  | { | 
|  | SafeRelease(outObject); | 
|  | return nullptr; | 
|  | } | 
|  | } | 
|  |  | 
|  | #endif  // UTIL_COM_UTILS_H |