/
githubmirror
/
PowerToys
Обзор
Документация
Войти
/
githubmirror
/
PowerToys
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/common/ManagedCsWin32/ComHelper.cs
45 строк
1 KB
Yu Leng
[AOT] move some LibraryImport define to common to avoid dup code (#40006)
19 июн 2025, 08:45
Не верифицирован
19 июн 2025, 08:45
1020c5a
Код
Авторство
О чём код?
// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Runtime.InteropServices; using System.Runtime.InteropServices.Marshalling; namespace ManagedCsWin32; public static class ComHelper { private static StrategyBasedComWrappers cw = new StrategyBasedComWrappers(); public static T CreateComInstance<T>(ref Guid rclsid, CLSCTX dwClsContext) { var riid = typeof(T).GUID; var hr = Ole32.CoCreateInstance(ref rclsid, IntPtr.Zero, dwClsContext, ref riid, out IntPtr comPtr); if (hr != 0) { throw new ArgumentException($"Failed to create {typeof(T).Name} instance. HR: {hr}"); } if (comPtr == IntPtr.Zero) { throw new ArgumentException($"Failed to create {typeof(T).Name} instance. CoCreateInstance return null ptr."); } try { var comObject = cw.GetOrCreateObjectForComInstance(comPtr, CreateObjectFlags.None); if (comObject == null) { throw new ArgumentException($"Failed to create {typeof(T).Name} instance. Cast error."); } return (T)comObject; } finally { Marshal.Release(comPtr); } } }