ArrayList、activeX和Delphi
我是一名业余天文学家,我用Delphi和标准为望远镜编写驱动程序 首先,我要特别感谢大卫·赫弗南,他在过去的两个月里给了我很多帮助。我在编写驱动程序方面取得了很大的进步,并且有一个评委:“Conform”,一个测试驱动程序所有兼容性的程序。起初情况很糟糕,现在我走上了好的道路。最后一个真正未解决的问题是ArrayList、activeX和Delphi,delphi,com,Delphi,Com,我是一名业余天文学家,我用Delphi和标准为望远镜编写驱动程序 首先,我要特别感谢大卫·赫弗南,他在过去的两个月里给了我很多帮助。我在编写驱动程序方面取得了很大的进步,并且有一个评委:“Conform”,一个测试驱动程序所有兼容性的程序。起初情况很糟糕,现在我走上了好的道路。最后一个真正未解决的问题是string的ArrayList。 Ascom望远镜驱动程序的文档具有以下属性: C# Visual Basic: ReadOnly Property SupportedActions As Ar
string
的ArrayList
。
Ascom望远镜驱动程序的文档具有以下属性:
C#
Visual Basic:
ReadOnly Property SupportedActions As ArrayList
Get
Visual C++
property ArrayList^ SupportedActions {
ArrayList^ get ();
}
字段值包含受支持操作名称的字符串数组列表(SafeArray集合)。已选择数组列表集合作为操作名称的载体,以便客户端更容易确定是否支持特定操作。通过Contains方法很容易做到这一点。由于集合也是可数的,因此很容易使用诸如For Each。。。为了在不必关心hom的情况下对会员进行操作,许多会员都在集合中。
集合已在望远镜规范中使用多年,并且已知与COM兼容。在.NET中,ArrayList是正确的实现,因为.NET泛型方法与COM不兼容 因此,我尝试创建一个自动化对象: 大法官“Conform”程序发给我(抱歉,这是法语错误信息的翻译): 错误.NET-异常:System.InvalidCastException:无法在类“System.Collections.ArrayList”的类型中强制转换类型为“System.\u ComObject”的COM对象。表示COM组件的类型实例,不能强制转换为不同于表示COM组件的类型;但是,它们可以在接口中强制转换,直到底层COM组件负责接口IID的调用
QueryInterface
中文或古希腊语对我来说更为明显。
我唯一发现的是在regedit中:
再次感谢你的帮助。
仅限您观看,一张用我的望远镜和一些自制程序制作的照片:
解决方案非常简单!!!我在网页上找到的。您想从.net获取ArrayList吗??让它:
function TTelescope.Get_SupportedActions: OleVariant;
var
capacity: Integer;
item:Variant;
dotNetArrayList:Variant;
begin
{ Create object }
dotNetArrayList := CreateOleObject('System.Collections.ArrayList');
{ Add an element }
dotNetArrayList.Add('Un élément chaîne');
item := dotNetArrayList.Item(0);
Result:=dotNetArrayList;
end;
而且它工作得很好。不过,非常感谢你的回答,也许有一天我会尝试学习C#。你为什么不改用TStringList呢?当Delphi有相当多合适的等效对象时,不要尝试使用.NET对象。看看
TList
(Delphi相当于ArrayList
)、TList
、TObjectList
、TObjectList
和TStringList
,仅举几个例子。你真正不知道的是你的目标是什么。您有一个.net组件需要从Delphi中使用吗?是这样吗?不知道为什么不直接使用C#。@Rudy如果组件是.net组件,那么使用Delphi类会有什么帮助。这只会导致镜像问题。Delphi可以使用TStringList,但.net代码不能。您好,我认为测试驱动程序的程序会等待类型为System.Collections.ArrayList
的组件。在驱动程序的另一部分中,我能够将IEnumerator与:importlib(“mscorlib.tlb”)代码>。我对C#一无所知,我喜欢Delphi:-(.最后,是否可以在Delphi中使用.net组件?
function TTelescope.Get_SupportedActions: OleVariant;
var
capacity: Integer;
item:Variant;
dotNetArrayList:Variant;
begin
{ Create object }
dotNetArrayList := CreateOleObject('System.Collections.ArrayList');
{ Add an element }
dotNetArrayList.Add('Un élément chaîne');
item := dotNetArrayList.Item(0);
Result:=dotNetArrayList;
end;