我是一名业余天文学家,用Delphi编写望远镜驱动程序,并使用标准 ASCOM。首先要特别感谢David Heffernan在过去两个月里给了我很多帮助。我在编写驱动程序方面取得了很大进展,有一个评判标准:'Conform',它测试驱动程序的所有兼容性。一开始情况非常糟糕,现在我已经走上了正确的道路。最后一个真正未解决的问题是一个
字段值
一个字符串的ArrayList(SafeArray集合),包含支持操作的名称。选择数组列表集合作为操作名称的载体,以便客户端更容易确定是否支持特定操作。这可以通过Contains方法轻松完成。由于集合也是可枚举的,因此可以使用诸如For Each...之类的结构来操作成员,而无需担心集合中有多少成员。
在望远镜规范中使用了集合已有多年,并已知与COM兼容。在.NET中,ArrayList是正确的实现,因为.NET通用方法与COM不兼容。
string
的ArrayList
。Ascom望远镜驱动程序的文档有一个属性:ArrayList SupportedActions { get; }
Visual Basic:
ReadOnly Property SupportedActions As ArrayList
Get
Visual C++
property ArrayList^ SupportedActions {
ArrayList^ get ();
}
字段值
一个字符串的ArrayList(SafeArray集合),包含支持操作的名称。选择数组列表集合作为操作名称的载体,以便客户端更容易确定是否支持特定操作。这可以通过Contains方法轻松完成。由于集合也是可枚举的,因此可以使用诸如For Each...之类的结构来操作成员,而无需担心集合中有多少成员。
在望远镜规范中使用了集合已有多年,并已知与COM兼容。在.NET中,ArrayList是正确的实现,因为.NET通用方法与COM不兼容。
所以我尝试制作一个自动化对象:
我收到了大法官“Conform”程序的错误信息(抱歉,这是法语翻译):
ERROR .NET - Exception: System.InvalidCastException: 无法将类型为'System.__ComObject'的COM对象强制转换为类'System.Collections.ArrayList'的类型。表示COM组件的类型实例不能被强制转换为与其不同的类型; 但是,它们可以被强制转换为接口,直到底层的COM组件负责调用QueryInterface以获取接口的IID为止!?!?!?!?!?
对我来说,中文或古希腊语更容易理解。我唯一找到的是在注册表中:
感谢您的帮助。这是一张我用望远镜拍摄,并使用自己编写的程序制作的照片,仅供您查看:
TList
(ArrayList
的Delphi等效对象),TList<T>
,TObjectList
,TObjectList<T>
和TStringList
,这只是其中几个例子。 - Rudy Velthuis