ClearsSript V8ScriptEngine TypeError: form.显示不是一个函数



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

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

在此示例中,获取具有 ID 的类MyFormClassName FormId 使用静态方法 MetaData.GetClass 。该方法返回 ID FormId in.NET(C#( 代码创建的 MyFormClassName 实例。有一种方法Show()显示实例中带有参数的窗口窗体。

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

形式。显示不是一个函数

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新