我将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
.当我使用带有名称AddHostObject
时form
它工作正常,但我不知道将来会使用什么变量名称。
有没有人知道如何在 V8ScriptEngine 中使用 .NET (C#( 对象方法?是否可以每次都注册主机对象以供对象方法使用?
最可能的问题是MetaData.GetClass
返回值类型是没有Show
方法的基类或接口。
如果这是正确的,则Show
由返回对象的实际类型提供,并且需要向下转换才能调用它。
有几种方法可以解决这个问题:
- 在 JavaScript 中使用
HostFunctions.cast
或HostFunctions.asType
进行向下转换。 - 将属性
ScriptMember(ScriptMemberFlags.ExposeRuntimeType)
添加到MetaData.GetClass
实现中。 - 将
ScriptEngine.DisableTypeRestriction
设置为true
(不推荐(。