/
githubmirror
/
PowerShell
Обзор
Документация
Войти
/
githubmirror
/
PowerShell
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/System.Management.Automation/engine/ComInterop/UnknownArgBuilder.cs
74 строки
2 KB
xtqqczze
Cleanup: Remove redundant empty lines (#13404)
25 авг 2020, 21:29
Не верифицирован
25 авг 2020, 21:29
16f0b74
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Linq.Expressions; using System.Runtime.InteropServices; namespace System.Management.Automation.ComInterop { internal class UnknownArgBuilder : SimpleArgBuilder { private readonly bool _isWrapper; internal UnknownArgBuilder(Type parameterType) : base(parameterType) { _isWrapper = parameterType == typeof(UnknownWrapper); } internal override Expression Marshal(Expression parameter) { parameter = base.Marshal(parameter); // parameter.WrappedObject if (_isWrapper) { parameter = Expression.Property( Helpers.Convert(parameter, typeof(UnknownWrapper)), typeof(UnknownWrapper).GetProperty(nameof(UnknownWrapper.WrappedObject)) ); } return Helpers.Convert(parameter, typeof(object)); } internal override Expression MarshalToRef(Expression parameter) { parameter = Marshal(parameter); // parameter == null ? IntPtr.Zero : Marshal.GetIUnknownForObject(parameter); return Expression.Condition( Expression.Equal(parameter, Expression.Constant(null)), Expression.Constant(IntPtr.Zero), Expression.Call( typeof(Marshal).GetMethod(nameof(System.Runtime.InteropServices.Marshal.GetIUnknownForObject)), parameter ) ); } internal override Expression UnmarshalFromRef(Expression value) { // value == IntPtr.Zero ? null : Marshal.GetObjectForIUnknown(value); Expression unmarshal = Expression.Condition( Expression.Equal(value, Expression.Constant(IntPtr.Zero)), Expression.Constant(null), Expression.Call( typeof(Marshal).GetMethod(nameof(System.Runtime.InteropServices.Marshal.GetObjectForIUnknown)), value ) ); if (_isWrapper) { unmarshal = Expression.New( typeof(UnknownWrapper).GetConstructor(new Type[] { typeof(object) }), unmarshal ); } return base.UnmarshalFromRef(unmarshal); } } }