E2197 Constant object cannot be passed as var parameter

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
ertank
Kıdemli Üye
Mesajlar: 1668
Kayıt: 12 Eyl 2015 12:45

Re: E2197 Constant object cannot be passed as var parameter

Mesaj gönderen ertank »

Merhaba,

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;
Cevapla