ClearsSript V8ScriptEngine TypeError:form.Show不是函数

时间:2018-01-02 08:11:01

标签: javascript c# clearscript

我在系统中的某些动态部分使用MS ClearScript library。我有一些已经用.NET(C#)代码创建的对象列表,这些对象用作函数使用的描述。像这样(Javascript):

var form = MetaData.GetClass('MyFormClassName', 'FormId'); form.Show();

在此示例中,使用静态方法MyFormClassName获取ID为FormId的类MetaData.GetClass。该方法返回在.NET(C#)代码中创建的标识为MyFormClassName的{​​{1}}实例。有一个方法FormId,它在一个实例中显示带有参数的窗体。

但是当我调用Show()方法时,我收到错误:

  

form.Show不是函数

引擎包含一个对象Show(),但没有方法。引擎不知道对象Properties。当我使用名称为Type的{​​{1}}时,它运行正常,但我不知道将来会使用哪个变量名。

是否有人知道如何在V8ScriptEngine中使用.NET(C#)对象方法?每次对象方法使用时,是否可以不注册宿主对象?

1 个答案:

答案 0 :(得分:0)

最可能的问题是MetaData.GetClass返回值类型是没有Show方法的基类或接口。

如果这是正确的,那么返回对象的实际类型会提供Show,并且需要downcasting才能调用它。

有几种方法可以解决这个问题:

  1. 使用HostFunctions.castHostFunctions.asType向下转换为JavaScript。
  2. 将属性ScriptMember(ScriptMemberFlags.ExposeRuntimeType)添加到MetaData.GetClass实施中。
  3. ScriptEngine.DisableTypeRestriction设为true(不推荐)。