0

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

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

在此示例中,使用静态方法获取MyFormClassName具有 ID的类。该方法返回一个带有在 .NET(C#) 代码中创建的ID的实例。有一种方法可以在实例中显示带有参数的窗体。FormIdMetaData.GetClassMyFormClassNameFormIdShow()

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

form.Show 不是函数

引擎包含一个对象Properties,但没有方法。引擎不知道对象Type。当我使用AddHostObjectwith nameform时,它​​工作正常,但我不知道将来会使用什么变量名。

有谁知道我如何在 V8ScriptEngine 中使用 .NET (C#) 对象方法?是否可以不每次都注册主机对象以供对象方法使用?

4

1 回答 1

0

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

如果正确,Show则由返回对象的实际类型提供,并且需要向下转换才能调用它。

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

  1. 在 JavaScript 中使用HostFunctions.castHostFunctions.asType向下转换。
  2. 将属性添加ScriptMember(ScriptMemberFlags.ExposeRuntimeType)到您的MetaData.GetClass实现中。
  3. 设置ScriptEngine.DisableTypeRestrictiontrue(不推荐)。
于 2018-01-05T14:03:21.887 回答