diff --git a/src/OneScript.StandardLibrary/Reflector.cs b/src/OneScript.StandardLibrary/Reflector.cs index 06415985d..0032434d6 100644 --- a/src/OneScript.StandardLibrary/Reflector.cs +++ b/src/OneScript.StandardLibrary/Reflector.cs @@ -51,8 +51,12 @@ public IValue CallMethod(IRuntimeContextInstance target, string methodName, Arra var methodIdx = target.GetMethodNumber(methodName); var methInfo = target.GetMethodInfo(methodIdx); - var argsToPass = GetArgsToPass(arguments, methInfo.GetParameters()); - + IValue[] argsToPass; + if (target.DynamicMethodSignatures) + argsToPass = arguments?.ToArray() ?? Array.Empty(); + else + argsToPass = GetArgsToPass(arguments, methInfo.GetParameters()); + IValue retValue = ValueFactory.Create(); if (methInfo.IsFunction()) { diff --git a/src/ScriptEngine/Machine/Contexts/COMWrapperContext.cs b/src/ScriptEngine/Machine/Contexts/COMWrapperContext.cs index 80f620dda..960ebdc01 100644 --- a/src/ScriptEngine/Machine/Contexts/COMWrapperContext.cs +++ b/src/ScriptEngine/Machine/Contexts/COMWrapperContext.cs @@ -327,14 +327,8 @@ public void Dispose() #endregion - public override bool DynamicMethodSignatures - { - get - { - return true; - } - } - + public override bool DynamicMethodSignatures => true; + [ScriptConstructor] public static COMWrapperContext Constructor(IValue[] args) { diff --git a/src/ScriptEngine/Machine/Contexts/UnmanagedCOMWrapperContext.cs b/src/ScriptEngine/Machine/Contexts/UnmanagedCOMWrapperContext.cs index 058ed8715..b9893ff1d 100644 --- a/src/ScriptEngine/Machine/Contexts/UnmanagedCOMWrapperContext.cs +++ b/src/ScriptEngine/Machine/Contexts/UnmanagedCOMWrapperContext.cs @@ -174,8 +174,11 @@ public override int GetMethodNumber(string name) public override BslMethodInfo GetMethodInfo(int methodNumber) { - //TODO: Доработать RcwMethodMetadata - return BslMethodBuilder.Create().Build(); + var md = _methods[methodNumber]; + return BslMethodBuilder.Create() + .Name(md.Name) + .ReturnType(md.IsFunction ?? true ? typeof(IValue) : typeof(void)) + .Build(); } private MethodSignature GetMethodDescription(int methodNumber) diff --git a/tests/reflector.os b/tests/reflector.os index 8b498cc28..7973d1ca4 100644 --- a/tests/reflector.os +++ b/tests/reflector.os @@ -50,6 +50,10 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвестныеТипы_СОтборомПримитивный"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвестныеТипы_СОтборомПользовательский"); +#Если Windows Тогда + ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаComОбъекта"); +#КонецЕсли + Возврат ВсеТесты; КонецФункции @@ -870,3 +874,11 @@ юТест.ПроверитьЗаполненность(ИзвестныйТип.Значение); КонецПроцедуры + +#Если Windows Тогда +Процедура ТестДолжен_ПроверитьВызовМетодаComОбъекта() Экспорт + FSO = ПолучитьCOMОбъект("", "Scripting.FileSystemObject"); + Рез = FSO.DriveExists("C"); + юТест.ПроверитьТип(Рез, "Булево"); +КонецПроцедуры +#КонецЕсли