Kod örneklerinizi tam olarak iletmenizde fayda var. Hata açık. Fonksiyonun değerini değiştirebilirim şeklinde tanımladığı parametreyi sabit ( const ) olarak kullanamazsınız.
Aşağıdaki şekilde düzenlendiğinde kod derlenebilir hale gelecektir.
Kod: Tümünü seç
uses
Winapi.ActiveX,
System.Win.ComObj;
type
TEnumerateCallBack = procedure(Item: IDispatch; var Continue: Boolean) of object;
procedure Enumerate(Collection: IDispatch; CallBack: TEnumerateCallBack);
var
EnumUnk, Element: OleVariant;
Enum: IEnumVariant;
Fetched: Cardinal;
Continue: Boolean;
DispParamNoArgs: TDispParams;
begin
DispParamNoArgs.rgvarg := nil;
DispParamNoArgs.rgdispidNamedArgs := nil;
DispParamNoArgs.cArgs := 0;
DispParamNoArgs.cNamedArgs := 0;
//Call _NewEnum via its DispID and get enumerator object's IUnknown interface
OleCheck(Collection.Invoke(DISPID_NEWENUM, GUID_NULL, 0, DISPATCH_PROPERTYGET, DispParamNoArgs, @EnumUnk, nil, nil));
//Check we got an IUnknown and get IEnumVariant from it
if VarType(EnumUnk) = varUnknown then
begin
Enum := IUnknown(EnumUnk) as IEnumVariant;
Continue := True;
//Use enumeration method to cycle through elements
while (Enum.Next(1, Element, Fetched) = S_OK) and Continue do
CallBack(Element, Continue)
end
end;