首页  编辑  

如何翻译VB/VBA/VBS中的for each a in A 中的代码

Tags: /超级猛料/COM、ActiveX,DDE/   Date Created:
[ 原创]如何翻译VB/VBA/VBS中的for each a in A 中的代码
Copyright 2004, Kingron
在翻译Delphi的代码的时候,我们经常碰到for each a in A中类似的代码,如果被翻译的对象有Count属性和Item属性的话,很好办,写成:
for i:= 0 to A.Count do
begin
 /// A.Item[i] or A.Item(i)
end;
就可以了。
问题是,有的对象并没有这些属性和方法,只是一个OLE对象,那么如何去做呢?这个时候要用到IEnumVariant了。
var
 Enum:IEnumVariant;
 Obj : OleVariant;
 V : Cardinal;
...
 Enum := IUnknown(A.NewEnum) as IEnumVariant;
 while Enum.Next(1, Obj, V) = S_OK do
 begin
   /// Each Obj, do something....
 end;
其中A.NewEnum中的NewEnum是任何类似的返回枚举接口的方法,根据各个不同的对象而不同,请查阅具体的对象的帮助即可。