好的,这是非常利基的,但我希望有人可以帮助我。另外,我对 CSharp 很熟悉,但对 JScript 和 COM 缺乏经验。
问题是这样的。我支持用 CSharp 编写并作为 COM 对象公开的应用程序组件。它公开了几个由其客户端应用程序调用的公共方法。客户端都是用 JScript 编写的经典 ASP 脚本文件。我想向返回对象集合的 COM 对象添加一个新的公共方法。
首先,返回单个结果对象工作正常......
我能够返回单个对象并访问它的属性。例如,在这个 C# 签名中......
ResultObject GetResult();
...ResultObject 是一个具有简单属性且没有逻辑的 POCO。我可以使用以下 JScript 访问它的属性:
var oMyObject = Server.CreateObject("MyNamespace.MyObject");
var result = oMyObject.GetResult();
Response.Write("<br /><i>('" + result.Value + "', '" + result.ID + "')</i>");
但是,当我返回一个数组时它会中断......
当我尝试从 C# 返回一个简单的 ResultObjects 数组时...
ResultObject[] GetResults();
...并从 JScript 访问它...
var oMyObject = Server.CreateObject("MyNamespace.MyObject");
var results = oMyObject.GetResults();
for (var i = 0; i < results.length; i++) {
Response.Write("<br /><i>('" + results[i].Value + "', '" + results[i].ID + "')</i>");
}
...调用脚本时出现以下错误:
Microsoft JScript 运行时错误“800a138f”
'results.length' 为 null 或不是对象
此外,尝试 JScript“typeof results”会给我一种“未知”类型。
如何从作为 COM 对象公开的 CSharp 类返回集合(数组、IEnumerable 等)并从经典 ASP JScript 访问它?