1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Worker // com_utils.h: Utility functions for working with COM objects 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef UTIL_COM_UTILS_H 10*8975f5c5SAndroid Build Coastguard Worker #define UTIL_COM_UTILS_H 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker template <typename outType> DynamicCastComObject(IUnknown * object)13*8975f5c5SAndroid Build Coastguard Workerinline outType *DynamicCastComObject(IUnknown *object) 14*8975f5c5SAndroid Build Coastguard Worker { 15*8975f5c5SAndroid Build Coastguard Worker outType *outObject = nullptr; 16*8975f5c5SAndroid Build Coastguard Worker HRESULT result = 17*8975f5c5SAndroid Build Coastguard Worker object->QueryInterface(__uuidof(outType), reinterpret_cast<void **>(&outObject)); 18*8975f5c5SAndroid Build Coastguard Worker if (SUCCEEDED(result)) 19*8975f5c5SAndroid Build Coastguard Worker { 20*8975f5c5SAndroid Build Coastguard Worker return outObject; 21*8975f5c5SAndroid Build Coastguard Worker } 22*8975f5c5SAndroid Build Coastguard Worker else 23*8975f5c5SAndroid Build Coastguard Worker { 24*8975f5c5SAndroid Build Coastguard Worker SafeRelease(outObject); 25*8975f5c5SAndroid Build Coastguard Worker return nullptr; 26*8975f5c5SAndroid Build Coastguard Worker } 27*8975f5c5SAndroid Build Coastguard Worker } 28*8975f5c5SAndroid Build Coastguard Worker 29*8975f5c5SAndroid Build Coastguard Worker #endif // UTIL_COM_UTILS_H 30