什么是替代通用的集COM互操作?
-
06-07-2019 - |
题
我试图返回一个集合的部门。网会被消耗ASP通过COM互操作。使用。净我只是返回的一般收集的,例如 List<Department>
, 但它似乎是仿制药不工作,以及与COM互操作。因此,我有什么选择?
我想到两个迭代表能够访问的一个项目索引。我应该继承的 List<Department>
, 中,实现一个 IList
, IList<Department>
或者另一个接口,或者是有更好的办法?理想的是我会喜欢没有实施一种定义收集每一个类型表,我需要。此外,会 List[index]
即使工作与COM互操作?
谢谢, Mike
例。净组成部分(C#):
public class Department {
public string Code { get; private set; }
public string Name { get; private set; }
// ...
}
public class MyLibrary {
public List<Department> GetDepartments() {
// return a list of Departments from the database
}
}
例ASP码:
<%
Function PrintDepartments(departments)
Dim department
For Each department In departments
Response.Write(department.Code & ": " & department.Name & "<br />")
Next
End Function
Dim myLibrary, departments
Set myLibrary = Server.CreateObject("MyAssembly.MyLibrary")
Set departments = myLibrary.GetDepartments()
%>
<h1>Departments</h1>
<% Call PrintDepartments(departments) %>
<h1>The third department</h1>
<%= departments(2).Name %>
相关的问题:
解决方案
后一些更多的研究和试验和错误,我认为我找到一个解决方案,通过使用 System.Collections.ArrayList
.但是,这不起作用越来越有价值的指数。为此,我创造了一个新的类 ComArrayList
那继承了 ArrayList
并增加了新的方法 GetByIndex
和 SetByIndex
.
COM互操作兼容的收集:
public class ComArrayList : System.Collections.ArrayList {
public virtual object GetByIndex(int index) {
return base[index];
}
public virtual void SetByIndex(int index, object value) {
base[index] = value;
}
}
更新。净组我的报表馆.GetDepartments:
public ComArrayList GetDepartments() {
// return a list of Departments from the database
}
更新ASP:
<h1>The third department</h1>
<%= departments.GetByIndex(2).Name %>
其他提示
因为你是只耗时的数据在ASP,我建议返回 Department[]
.这应该直接与有SAFEARRAY在COM.它支持列举并编制索引的访问。
public Department[] GetDepartments() {
var departments = new List<Department>();
// populate list from database
return departments.ToArray();
}
在ASP码,你能不能不这么做?
<h1>The third department</h1>
<%= departments.Item(2).Name %>
我知道,在VB。NET,C#索引支持通过"项目"的财产,因此,同样的想法可以在工作ASP。
我一直在试图解决这一同样的问题vb.net (不流利C#)。
由于清单(T)支持IList接口,COM接口,为我的目的我已经尝试指定
Public Class MyClass
...
Private _MyList As List(of MyObject)
Public ReadOnly Property MyList As IList Implements IMyClass.MyList
Get
Return _MyList
End Get
End Property
然后指定的公共接口,COM看到
ReadOnly Property MyList As IList
这似乎工作的现从一个经典的ASP客户,例化的对象,呼吁发电机的功能,然后读取列表的财产就像一阵列。
不隶属于 StackOverflow