public static int CreateComObject <IOut>( Func <IOut> callback, out IOut obj ) where IOut : class, IUnknown { try { obj = callback.Invoke(); return(0); } catch (Exception e) { #if DEBUG DirectX.PrintDebugMessage(e.Message); DirectX.PrintDebugMessage(e.StackTrace); #endif obj = null; return(e.HResult); } }