我在系统中的某些动态部分使用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#)对象方法?每次对象方法使用时,是否可以不注册宿主对象?
答案 0 :(得分:0)
最可能的问题是MetaData.GetClass
返回值类型是没有Show
方法的基类或接口。
如果这是正确的,那么返回对象的实际类型会提供Show
,并且需要downcasting才能调用它。
有几种方法可以解决这个问题:
HostFunctions.cast
或HostFunctions.asType
向下转换为JavaScript。ScriptMember(ScriptMemberFlags.ExposeRuntimeType)
添加到MetaData.GetClass
实施中。ScriptEngine.DisableTypeRestriction
设为true
(不推荐)。